文本文件处理
在python2 与python3中对文本的读写有很大的差异
1 字符串的语义发生了变化
在python2 中 unicode字符串存入到文件中需要先进行编码
如 s = u'你好' 存储需要编码 s.encode('utf8') , 编码之后才能存道文件中 之后读取时采用decode('utf8') 进行解码
python3 中一般将二进制字符存入文件中b'ss'
通过encouding() 进行编解码 , 自动完成编码与解码
如何处理二进制文件
在struct 下的unpack 可以完成对二进制的解析
如何设置文件的缓存?
为了减少多次的IO 写操作,文件通常使用缓存区, 当写入的文件比较小时候,都先放到缓存区中
默认缓存区的大小是4096个字节
在全缓存,
# 设定缓存区大小 f = open('file2','w', buffering=2048 )
行缓存:
#行缓存把buffer改为1 f = open('file2','w', buffering=1)
无缓存 : 将buffering 改为0
如何将文件映射道内存?
可以使用mmap函数
如何访问文件状态?
方法:
1 使用系统调用,os 模块 下的stat , fstat,lstat 获取文件状态
import os
s = os.stat("xiao2.txt")
print(s) 结果:
os.stat_result(st_mode=33206, st_ino=844424930146185, st_dev=180626563, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1657205103, st_mtime=1657205103, st_ctime=1657204732)
# 对文件状态进行解析
import stat
print(stat.S_ISDIR(s.st_mode)) # 判断是否是文件夹
print(s.st_mode & stat.S_IRUSR) # 判断用户是否有读权限, 返回大于0 表示有
print(s.st_mode & stat.S_IXUSR) # 判断用户执行权限 返回0 表示没有
import time
print(s.st_atime) # 访问时间,返回秒数
print(time.localtime(s.st_atime)) # 返回年月日
# lstat 取到符号链接文件
2 标准库os.path下一些函数
print(os.path.isdir("xiao2.txt")) # 判断是不是文件夹
print(os.path.islink("xiao2.txt")) #判断是否是符号链接
print(os.path.isfile("xiao2.txt")) # 判断普通文件
print(os.path.getatime("xiao2.txt")) # 获取访问时间
print(os.path.getsize("xiao2.txt")) # 获取文件大小
如何使用临时文件?
使用empfile下的tempporaryFile , NamedTemporaryFile
from tempfile import TemporaryFile,NamedTemporaryFile f = TemporaryFile() # 创建临时数据 由他创建是临时文件,实在系统路劲中找不到的 f.write('aasd') #读物临时文件 f.seek(0) f.read(100)
f2 = NamedTemporaryFile() # 创建一个又名字的临时文件
print(f2.name) # 查看文件名字
f3 = NamedTemporaryFile(delete=False) # 在删除文件后, 临时文件不被一起删除