利用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 执行单元,它必须依托于进程存活
进程:
进程是指一个程序在给定数据集合上的一次执行过程,是系统进行资源分配和运行调用的独立单位。
可以简单地理解为操作系统中正在执行的程序。也就说,每个应用程序都有一个自己的进程
每一个进程启动时都会最先产生一个线程,即主线程。然后主线程会再创建其他的子线程
两者的区别
线程必须在某个进行中执行。
一个进程可包含多个线程,其中有且只有一个主线程。
多线程共享同个地址空间、打开的文件以及其他资源。
多进程共享物理内存、磁盘、打印机以及其他资源