文本文件处理

在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) # 在删除文件后, 临时文件不被一起删除

 

posted @ 2022-07-13 22:30  huxl1  阅读(42)  评论(0编辑  收藏  举报