一、文件处理初识
- 打开文件,得到文件句柄并赋值给一个变量
- 通过文件句柄对文件进行操作
- 关闭文件
- 文本示例
汉皇重色思倾国,御宇多年求不得。
杨家有女初长成,养在深闺人未识。
天生丽质难自弃,一朝选在君王侧。
回眸一笑百媚生,六宫粉黛无颜色。
春寒赐浴华清池,温泉水滑洗凝脂。
侍儿扶起娇无力,始是新承恩泽时。
- 基本操作
f = open("长恨歌", 'r', encoding="utf-8") # open函数会使用当前系统的编码打开
data = f.read()
print(data)
f.close()
二、基本文件处理
- 读模式:r
f = open("长恨歌",'r', encoding="utf-8") # open函数会使用当前系统的编码打开
print(f.read()) #读取全部,按字符读
print(f.readable()) #判断文件是否可读 True
print(f.readline(), end='') #读一行,end='' 换行符
print(f.readline()) #杨家有女初长成,养在深闺人未识。
print(f.readlines()) #将所有行读处理放到列表中
f.close()
- 写模式:w
- 只有字符串才能写到文件中
f = open("dongfei_file", 'w', encoding="utf-8")
f.write("汉皇重色思倾国,御宇多年求不得。
")
f.write("杨家有女初长成,养在深闺人未识。
")
print(f.writable()) #判断文件是否可写 True
f.writelines(["天生丽质难自弃,一朝选在君王侧。
", "回眸一笑百媚生,六宫粉黛无颜色。
"]) #将列表中的元素写到文件中
f.close()
- 追加模式:a
f = open("dongfei_file", 'a', encoding="utf-8")
f.write("春寒赐浴华清池,温泉水滑洗凝脂。") #写到文件最后
f.close()
-
读写模式:r+
-
写读模式:w+,x+,a+
-
模拟修改文件,硬盘上的文件是无法修改的
f = open("dongfei_file", 'r', encoding="utf-8")
data = f.readlines()
f.close()
f2 = open("new_dongfei_file", 'w', encoding="utf-8")
f2.writelines(data[0]) #文件的处理逻辑
f2.close()
- 自动关闭文件
with open("a.txt", "r", encoding="utf-8") as src_f,
open("new_a.txt", "w", encoding="utf-8") as des_f:
data = src_f.readline()
des_f.write(data)
print(data)
- 二进制读:rb
with open("a.txt", "rb") as f:
data = f.read()
print(data)
print(data.decode())
- 二进制写:wb
with open("b.txt", "wb") as f:
f.write(bytes("dongfei 你好
", encoding="utf-8"))
f.write("dongfei2 你好".encode("utf-8"))
f.write(b"dongfei3
") #这样方法不能写中文
-
二进制追加:ab
-
文本模式:t
-
二进制模式:b,二进制模式可以跨平台
-
其他方法:
f = open("c.txt", "w", encoding="utf-8")
print(f.closed) #判断文件是否是关闭的
print(f.encoding) #打印文件打开的编码
f.flush() #将内存中修改的数据保存至硬盘
print(f.tell()) #光标当前所在位置
f.seek(0) #控制光标的移动,按字节移动
f.truncate() #截取
- 光标操作
#绝对位置seek
with open("dongfei_file", "r", encoding="utf-8") as f:
print(f.tell()) #0
f.seek(10)
print(f.tell()) #10
f.seek(3)
print(f.tell()) #3,默认从文件开头seek
#相对位置seek
with open("dongfei_file", "rb") as f:
print(f.tell()) #0
f.seek(10,1)
print(f.tell()) #10
f.seek(3,1)
print(f.tell()) #13 ,以相对位置seek
#倒叙位置seek
with open("dongfei_file", "rb") as f:
print(f.tell()) #0
f.seek(-10,2) #倒叙seek,-10是往回移动
print(f.tell())
f.seek(-3,2)
print(f.tell()) #以相对位置seek
- 读出文件的最后一行
with open("dongfei_file", "rb") as f:
for i in f:
offs = -10
while True:
f.seek(offs,2)
data = f.readlines()
if len(data) > 1:
print("文件的最后一行:",data[-1].decode("utf-8"))
break
offs *= 2