一、IO
1、文件读写
(1)、读文件
打开文件 : f = open('/home/jamson/pythonFiles/test.txt','r') #其路径可以是绝对路径,也可以是相对路径。第二个参数是指明打开方式 或者:
with open('test.txt','r') as f: # 系统会自动调用f.close()关闭打开的文件
print(f.read())
一次性读 content = f.read() # 一次性读取所有的数据并返回一个str对象
一次读n个字节 cont = f.read(n)
一次读一行 cnt = f.readline()
一次读取所有,并按照行存储到list contList = f.readlines()
(2)二进制文件
二进制文件如图片、视频等,在打开方式加上b就行
f = open('flowers.jpg','rb')
f.read()
(3)f = open('test.tx','r',encoding='gbk',errors='ignore')#其编码默认为utf-8
(4)写文件
with open('test.txt','w') as f:#该方式会覆盖原来的所有信息
f.write('hello')
with open('test.txt','a') as f:#在文档的尾部添加信息
f.write('Hello')
2、StringIO
从内存中读写str
from io import StringIO
f = StringIO()
f.write('Hello')
f.write('world')
f.getvalue() #'Hello world'
3、BytesIO
二进制操作,二进制流,使用与StringIO类似
4、目录文件
import os
查看当前目录: os.path.abspath('.')
创建一个新的路径 path=os.path.join('/home/jamson','testdir') #返回一个字符串,该字符串为路径
新建目录 os.mkdir(path)
删除目录 os.rmdir(path)
拆分路径 os.path.split(path) #返回一个tuple (‘/home/jamson','tesrdir')
得到文件的后缀名 os.path.splitext(p)[1] #os.path.splitext()函数返回一个tuple
文件重命名 os.rename('test.txt','text.py')
文件删除 os.remove('text.py')
判断是否为目录 os.path.isdir(x)
判断是否为文件 os.path.isfile(x)
5、序列化pickling
将内存中的变量变成可存储或者可以传输的过程
import pickle
d=dict(name='jamson',age=20,score=99)
pickle.dumps(d) #将对象d序列化成bytes
with open('dump.txt','wb') as f:
pickle.dump(d,f)# 将序列写入文件dump.txt
with open('dump.txt','rb' as f:
t = pickle.load(f)#读取写入的信息
6、JSON
把对象变为一个json
import json
json_str=json.dumps(d)
反序列化
json.loads(json_str)
对象json化
def Student(object):
def __init__(self,name,age):
self.name = name
self.age = age
json.dumps(s,default= lambda obj:obj.__dict__)
一般的类用dict来存储属性
反json化
def json2std(d):
return Sudent(d['name'],d['age'])
json.loads(d,object_hook=json2std)
二、进程与线程
1、多进程
(1)在Unix/Linux、Mac里有一个fork()函数用来创建进程
import os
pid = os.fork()#创建进程
(2)在Windows下没有fork()函数,利用python的multiprocessing模块
from multiprocessing import Process
p = Process(target= function_xxx,args=('xxx',))#创建一个Process对象,参数为一个函数,以及该函数的一些参数
p.start()#启动进程
p.join()#等待子进程接收后才执行后面的代码
(3)进程池Pool
当需要批量创建进程时,可以使用Pool
from multiprocessing import Pool
p = Pool(5)#创建Pool对象,5表示同时运行的进程数
for i in range(10):#创建10个进程
p.apply_async(function_xxx,args=('xxx',))
p.close()
p.join()#这两句的位置不能颠倒
(4)子进程subprocess
(5)进程之间的通讯
在multiprocessing 里有提供Pipe、Queue等方式
2、多线程
(1)threading.Thread 创建线程
import threading
t = threading.Thread(target=function_xxx,name='xxxx')#子进程将要执行的函数,以及子进程的名字
t.start()
t.join()
(2)一个进程中的资源由所有的线程共享,所以易造成混乱。操作系统的P、V操作
lock = threading.Lock()
在需要读写共享变量的时候加上
lock.acquire()#加锁
try:
...
finally:
lock.release()#一定要解锁