python与linux操作系统之间的联系

利用python操纵linux
import os
#返回操作系统类型,值为posix,是linux操作系统,值为nt,是window操作系统
print os.name
#返回操作系统的详细信息
print os.uname()
#系统的环境变量
print os.environ
print os.environ.get('PATH')
#判断是否为绝对路径(不会判断文件或者目录是否存在)
print os.path.isabs('/tmp/westos')
print os.path.isabs('hello')
#生成绝对路径
print os.path.abspath('westos.txt')
print os.path.join('home/kiosk/Desktop','westos.txt')
print os.path.join(os.path.abspath('.'),'westos.txt')
#获取目录名或者文件名
filename='/home/kiosk/PycharmProjects/python/python08/westos.txt'
print os.path.basename(filename)
print os.path.dirname(filename)


#7.创建目录/删除目录
os.mkdir('img')
os.makedirs('img/file')    ##mkdir -p
os.rmdir('img/file')
os.rmdir('img')
#8.创建文件/删除文件
os.mknod('wb.txt')
os.remove('wb.txt')
#9.文件的重命名(mv)
os.rename('wb.txt','westos.txt')
#10.判断文件或者目录是否存在
print os.path.exists('img')
print os.path.exists('data1.txt')
#11.分离后缀名和文件名
print os.path.splitext('westos.txt')
#12.将目录名和文件名分离
print os.path.split('/tmp/hello/hello.txt')

#在当前目录新建目录img,里面包含多个文件,文件名各不相同(x4g5.png)
#将当前img目录所有.png结尾的后缀名改为.jpg
import  os
import random
import string
def gen_code(len=4):
    #随即生成4位文件名
    li=random.sample(string.ascii_letters+string.digits,len)##随机取名
    #将列表元素拼接成字符串
    return ''.join(li)
def create_file():
    #随机生产100个文件名
    li={gen_code() for i in range(100)}
    os.mkdir('img')
    for name in li:
        os.mknod('img/'+name+'.png')
create_file()
def modify_suffix(dirname,old_suffix,new_suffix):
    """

    :param dirname: 所要操作的目录
    :param old_suffix: 之前的文件后缀
    :param new_suffix: 新的文件后缀
    :return:
    """
    #判断查找的目录是否存在,如果不存在,显示报错
    if os.path.exists(dirname):
        #找出所有以old_suffix(.png)结尾的文件
        pngfiles=[filename for filename in os.listdir(dirname)
                  if  filename.endswith(old_suffix)]
        #将文件名和后缀名分开,留下文件名
        basefiles=[os.path.splitext(filename)[0] for filename in pngfiles]
        print basefiles
        #文件重命名
        for filename in basefiles:
            #需要加上目录名
            oldname=os.path.join(dirname,filename+old_suffix)
            newname=os.path.join(dirname,filename+new_suffix)
            os.rename(oldname,newname)
            print '%s重命名成%s成功'%(oldname,newname)
    else:
        print '%s不存在不能操作'%dirname
modify_suffix('img','.png','.jpg')


前提:
yum install mariadb-server  -y
systemctk  restart  mariadb
vim  /etc/my.cnf
加skip-networking=1
systemctl  restart mariadb
netstat  -antlupe  |  grep  mysql
mysql_secure_installation
mysql  -uroot  -p  ##进入数据库
show  databases
create database  python3
use python3
show  tables;
create table  userinfo(id  int,name varchar(10));
show  tables;
insert  into userInfo(id,name)value((1,'tom')
insert  into userInfo(id,name)value((2,'tom')
select name  from  userInfo
select id from userInfo
select *  from userInfo
update  userInfo  set name='harry' where id=1;
alter  table userInfo  add  address varchar(10);
                      
yum  install gcc  -y
yum install  MySQl-python  -y
#联网下载   pip install  Mysql-Python

import MySQLdb
#打开门
conn=MySQLdb.Connect(host='127.0.0.1',user='root',passwd='westos',db='python3')
#伸出手
cur=conn.cursor()  #创建一个手
#拿东西
#这个操作影响了多少行(有多少行被操作了)
recount=cur.execute('select * from userInfo')
#把手伸回来
cur.close()
#把门关上
conn.close()
print recount

import MySQLdb
#打开门
conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='westos',db='python3')
#伸出手
cur=conn.cursor()
#拿东西
recount=cur.execute('select * from userInfo')
data=cur.fetchall()
#把手伸回来
cur.close()
#把门关上
conn.close()
print recount
print data

##数据库的增加
import MySQLdb
#打开门
conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='westos',db='python3')
#伸出手
cur=conn.cursor()
#操作数据
sql='insert  into userInfo(id,name,address) values(%s,%s,%s)'
params=('1','uu','usa')
recount=cur.execute(sql,params)
#提交申请
conn.commit()
#把手伸回来
cur.close()
#把门关上
conn.close()
print recount

##数据库的删除
import MySQLdb
#打开门
conn=MySQLdb.connect(host='localhost',user='root',passwd='westos',db='python3')
#伸出手
cur=conn.cursor()
sql='delete from userInfo  where id =%s'
params=(1,)
recount=cur.execute(sql,params)
#提交申请
conn.commit()
#把手伸回来
cur.close()
#把门关上
conn.close()


##数据库的改正
import MySQLdb
conn=MySQLdb.connect(host='localhost',user='root',passwd='westos',db='python3')
cur=conn.cursor()
sql='update userInfo  set name=%s where  id=%s'
params=('wb','2')
recount=cur.execute(sql,params)
conn.commit()
cur.close()
conn.close()


#mysql的回轨##不要一步一执行
#建立一个表,里面有money和id号
mysql -uroot  -p
use python3
create  table count (money  varchar(10),id  int )
insert into   count values('100','1')
insert into   count values('0','2')
import MySQLdb
conn=MySQLdb.connect(host='localhost',user='root',passwd='westos',db='python3')
cur=conn.cursor()
sql='update count set money=%s where id=1'
params=('0',)
recount=cur.execute(sql,params)

sql='update count set money=%s where id=2'
params=('100',)
recount=cur.execute(sql,params)
conn.commit()
cur.close()
conn.close()

##多线程  一个进程下面可以有多个线程,线程可以提高效率
import threading
from time  import ctime,sleep
def music(a):
    for  i in range(2):
        print 'I was listening to %s .%s'%(a,ctime())
        sleep(1)
def movie(b):
    for  i in range(2):
        print 'I was watching %s .%s'%(b,ctime())
        sleep(5)
#创建threads列表
threads=[]
t1=threading.Thread(target=music,args=('作曲家',))
threads.append(t1)
t2=threading.Thread(target=movice,args=('老九门',))
threads.append(t2)
for t  in  threads:
    #当父线程执行完最后一条语句:print 'all  aver %s'%ctime()
    #没有等子线程,直接就退出了,同时我们的子线程也一同结束
    t.setDaemon(True)
    t.start()
#join()的作用是,在子线程完成之前,这个子线程的父线程将一直被阻塞
t.join()
print 'all  aver %s'%ctime()


#另外一种将法
from threading import Thread
def Foo(arg):
    print arg
print 'before'

#让线程和函数建立关系
t1=Thread(target=Foo,args=(1,))
t1.start()
print t1.getName()
t2=Thread(target=Foo,args=(2,))
t2.start()
print t2.getName()
print 'after'

from threading import Thread
import time
def Foo(arg):
    for item in range(10):
        print item
        time.sleep(1)
print 'before'

t1=Thread(target=Foo,args=(1,))
t1.setDaemon(True)
t1.start()
print 'after'  ##主线程没有结束,子线程还会执行 什么时候主线程执行完了,子线程就跟着一起销毁
time.sleep(5)

from threading import Thread
import time
def Foo(arg):
    for item in range(10):
        print item
        time.sleep(1)
print 'before'

t1=Thread(target=Foo,args=(1,))
#t1.setDaemon(True)
t1.start()
#主线程到join()就不网下走了,直到子线程执行完了
t1.join(5)
print 'after'  ##主线程没有结束,子线程还会执行 什么时候主线程执行完了,子线程就跟着一起销毁
#time.sleep(5)

什么是线程:
线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。它被包含在进程之中,
是进程中的实际运作单位。一个进程中可以并发多个线程,每条线程并行执行不同的任务。
(线程是进程中的一个实体,是被系统独立调度和分派的基本单元)

线程和进程的区别

(1)线程共享内存空间;进程的内存是独立的

(2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现

(3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆

(4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程

(5)改变主线程(如优先权),可能会影响其它线程;改变父进程,不影响子进程
=====================================================================

现在pc都是多核的,使用多线程能充分利用 CPU 来提供程序的执行效率
线程:
    线程是一个基本的 CPU 执行单元,它必须依托于进程存活
进程:
    进程是指一个程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调用的独立单位。
    可以简单地理解为操作系统中正在执行的程序。也就说,每个应用程序都有一个自己的进程

每一个进程启动时都会最先产生一个线程,即主线程。然后主线程会再创建其他的子线程

两者的区别
线程必须在某个进行中执行。
一个进程可包含多个线程,其中有且只有一个主线程。
多线程共享同个地址空间、打开的文件以及其他资源。
多进程共享物理内存、磁盘、打印机以及其他资源

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值