文件操作
什么文件?
操作系统提供给用户操作复杂硬件(硬盘)的简易的接口
为什么操作文件
人或者应用程序需要永久的保存数据
文件的打开过程
- step1 点击需要打开的文件
- step2 操作系统接收到命令,将文件路径传送给CPU
- step3 CPU根据路径去硬盘中寻找文件,然后调取到内存中
- step4 操作系统将调取的文件显示出来,可进行读写保存等操作
文件打开的模式
r 只读模式
w 只写模式
a 追加写模式
操作文件单位的方式
t 文本文件 t在使用的时候需要指定encoding参数 如果不知道默认是操作系统的默认编码
b 二进制 (因为已经制定了用二进制模式)所以一定不能指定encoding参数
mode参数
可以不写 不写的话默认是rt 只读的文本文件 这个t不写默认就是t
r模式
with open(r'D:Python项目day07a.txt',mode='r',encoding='utf-8') as f: print(f.readable()) # 是否可读 print(f.writable()) # 是否可写 print(f.read()) # 一次性将文件内容全部读出
# r模式在打开文件的时候 如果文件不存在 直接报错 # 文件路径可以写相对路径 但是需要注意该文件必须与执行文件在同一层文件下 with open(r'a.txt',mode='r',encoding='utf-8') as f: with open(r'a.txt','r',encoding='utf-8') as f1: mode关键字可以不写 print(f.readable()) # 是否可读 print(f.writable()) # 是否可写 print(">>>1:") print(f.read()) # 一次性将文件内容全部读出 print('>>>2:') print(f.read()) # 读完一次之后 文件的光标已经在文件末尾了,再读就没有内容了可读 print(f.readlines()) # 返回的是一个列表 列表中的一个个元素对应的就是文件的一行行内容 for line in f: # f可以被for循环 每for循环依次 读一行内容 print(i) # 这个方法 就可以解决大文件一次性读取占用内存过高的问题 print(f.readline()) # 只读取文件一行内容 print(f.readline()) print(f.readline()) print(f.readline())
w模式(慎用)
# 1.文件不存在的情况下 自动创建该文件 # 2.当文件存在的情况下 会先清空文件内容再写入 with open(r'xxx.txt',mode='w',encoding='utf-8') as f: print(f.readable()) # 是否可读 print(f.writable()) # 是否可写 f.write('不不不,你没有翻~ ') f.write('不不不,你没有翻~ ') f.write('不不不,你没有翻~ ') f.write('不不不,你没有翻~ ') f.write('不不不,你没有翻~') l = ['不sdffs,sdfs有翻~ ','不sdfsdf不,你sdfsf翻~ ','不sfad不,你没sa翻~ '] f.writelines(l) # 上下等价 for i in l: f.write(i)
a模式
# 1.当文件不存在的情况下 自动创建该文件
# 2.当文件存在的情况下,不清空文件内容, 文件的光标会移动文件的最后
with open(r'yyy.txt',mode='a',encoding='utf-8') as f:
print(f.readable()) # 是否可读
print(f.writable()) # 是否可写
f.write('我是小尾巴
')
其他模式补充
“纯净模式”
r 只读模式
w 写模式
a 追加写模式
“其他模式”
r+
w+
a+
r+模式
# 执行前的test.txt
# >>>>>>
天上的地上的
水里的
看的见的看不见的都是
# >>>>>>
with open(r'test.txt',mode='r+',encoding='utf-8') as f:
print(f.readable()) # True # 是否可读
print(f.writable()) # True # 是否可写
print(f.readline()) # 天上的地上的 # 输出第一行内容
f.write('都是你的')
# 执行后的test.txt
# >>>>>>
天上的地上的
水里的
看的见的看不见的都是你的
# >>>>>>
在文档末尾加上了"都是你的"
# 当你指定r+b模式,即读为二进制
with open(r'test.txt',mode='r+b') as f:
# 第一种解码方式
res = f.read()
print(res.decode('utf-8')) # 都不见了
#第二种解码方式
res1 = str(res,encoding='utf-8')
print(res1) # 都不见了
w+模式
# w+模式下执行前的test.txt
# >>>>>>
天上的地上的
水里的
看的见的看不见的都是你的
# >>>>>>
with open(r'test.txt',mode='w+',encoding='utf-8') as f:
print(f.readable())
print(f.writable())
print(f.readline())
f.write('都不见了')
# w+模式下执行后的test.txt
# >>>>>>
都不见了
# >>>>>>