文件与IO
读写文件
文本文件读取
with open('somefile.txt', 'rt') as f
文本文件写入
with open('somefile.txt', 'wt') as f
encoding='ascii' 文件编码
errors='replace|ignore' 错误处理方式
打印输出至文件
print('Hello World!', file=f) #文件必须以文本模式打开
指定打印分隔符和结束符
在 print() 函数中使用 sep 和 end 关键字参数
print('ACME', 50, 91.5, sep=',', end='!!\n')
读写字节数据
字节文件读取
with open('somefile.bin', 'rb') as f
字节文件写入
with open('somefile.bin', 'wb') as f
文件不存在才可写入用xt,xb替换wt,wb
字符串I/O
io.StringIO()
二进制I/O
io.BytesIO()
读写压缩文件
gzip文件读取
import gzip
with gzip.open('somefile.gz', 'rt') as f
bz2文件读取
import bz2
with bz2.open('somefile.bz2', 'rt') as f
固定大小记录的文件迭代
from functools import partial
RECORD_SIZE = 32
with open('somefile.data', 'rb') as f:
records = iter(partial(f.read, RECORD_SIZE), b'')
for r in records:
functools.partial 用来创建一个每次被调用时从文件中读取固定数目字节的可调用对象。 标记值 b'' 就是当到达文件结尾时的返回值
内存映射二进制文件
import mmap
mmap.mmap(filename, os.path.getsize(filename), access=mmap.ACCESS_WRITE)
用 mmap 将文件映射到内存中是一个高效和优雅的随机访问文件的方法。
注意点:
内存映射一个文件并不会导致整个文件被读取到内存中
如果多个Python解释器内存映射同一个文件,得到的 mmap 对象能够被用来在解释器直接交换数据
文件操作
获取文件名
os.path.basename
获取目录名
os.path.dirname
路径拼接
os.path.join
展开用户全路径
os.path.expanduser
分开文件扩展名
os.path.splitext
文件或目录是否存在
os.path.exists
是否为文件
os.path.isfile
是否为目录
os.path.isdir
是否为文件链接
os.path.islink
链接文件源地址
os.path.realpath
获取文件大小
os.path.getsize
获取文件修改时间
os.path.getmtime
获取目录下文件列表
os.listdir
open 或 listdir 传入 b'file'时通过原始未解码的方式处理文件名,可避免一些文件编码问题导致的错误
创建临时文件和文件夹
创建临时文件
from tempfile import TemporaryFile
f = TemporaryFile('w+t')
创建带名称的文件
from tempfile import NamedTemporaryFile
NamedTemporaryFile('w+t')
创建临时目录
from tempfile import TemporaryDirectory
与串行端口的数据通信
import serial
序列化python对象
import pickle
序列化为二进制 pickle.dump(data, f)
序列化为字符串 pickle.dumps()
从字节流恢复 pickle.load()
从字符串恢复 pickle.loads()