文件的打开关闭统一使用with资源管理器
文件打开执行读写之后需要关闭,在Python里统一使用with资源管理器关闭文件,格式为:
with open(filepath, modular) as f:
- filepath: 文件路径,相对路径时文件与源文件同一目录
- modular: 选择打开方式。
打开方式:
b为操作对象为二进制文件时使用
模式 | 可做操作 | 若文件不存在 | 是否覆盖 |
---|---|---|---|
r / rb | 只能读 | 报错 | - |
w / wb | 只能写 | 创建 | 是 |
a / ab | 只能写 | 创建 | 否,追加写 |
r+ / rb+ | 可读可写 | 报错 | 是 |
w+ / wb+ | 可读可写 | 创建 | 是 |
a+ / ab+ | 可读可写 | 创建 | 否,追加写 |
创建txt文件并写入数据,之后读取文件
with open(r"file.txt","w") as f:
f.writelines("Hello,world")
f.writelines("\nI am Huawei")
with open(r"file.txt","a+") as f:
f.writelines("\nDo my best for world")
with open(r"file.txt", "r+") as f:
content = f.readlines()
for item in content:
print(item)
运行结果:
Hello,world
I am Huawei
Do my best for world
换行符也占一个字符
文件的定位读写
tell()返回当前指针的位置
seek(offset, whence)定位到文件的指定读写位置
offset:表示偏移量
whence:表示方向,该参数有三个值:
1、SEEK_SET或者0:whence参数的默认值, 表示从文件的起始位置开始偏移
2、SEEK_CUR或者1:表示从文件当前位置开始偏移
3、SEEK_END或者2:从文件末尾开始偏移
在使用seek()函数时,whence参数设为1/2时必须用二进制读取文件
with open(r"file.txt","rb") as f:
print("当前指针位置:",f.tell())
print(f.read(3))
print("当前指针位置:",f.tell())
f.seek(8)
print(f.read(3))
print("--------",f.tell())
f.seek(-4,1)
print(f.tell())
f.seek(-3,2)
print(f.tell())
print(f.read())
使用扩展包读写文件及异常处理
import pickle
with open("file.dat","wb") as f:
pickle.dump("若逢新雪初霁,满月当空",f)
pickle.dump("下面平铺着皓影",f)
pickle.dump("而你带着笑向我走来",f)
pickle.dump("月色与雪色之间",f)
pickle.dump("你是第三种绝色",f)
with open("file.dat", "rb") as f:
while True:
try:
print(pickle.load(f))
except:
break
运行结果:
若逢新雪初霁,满月当空
下面平铺着皓影
而你带着笑向我走来
月色与雪色之间
你是第三种绝色