文件操作
文件操作
文件打开方法
# open方法打开path路径下的文件并返回可操作对象
f = open('a.txt','r',encoding='utf-8') # a.txt文件内容: 123xie
print(f.read()) # 123xie
f.close() # 关闭这个对象,回收并释放资源。这个步骤极其重要
# with open可以自动帮我们执行close()方法
with open('b.txt','r',encoding='utf-8') as f2: # b.txt内容: 456zhong
print(f2.read()) # 456zhong with子代码执行完自动执行f2.close()
文件打开模式
# r 只读模式,可执行read方法,不能对文件执行写入操作write()
# w 只写模式,可执行write方法,不能读取文件内容操作read()
# a 追加模式,可执行write方法,从文件末尾开始追加内容
# 假设以下程序文件和a.txt在同一个路径下,内容为:123xzj
with open('a.txt','r',encoding='utf-8') as f:
print(f.read()) # 123xzj
with open('a.txt','w',encoding='utf-8') as f:
print(f.write('ok')) # ok w模式写入数据会覆盖原来内容
with open('a.txt','a',encoding='utf-8') as f:
print(f.write('ok')) # 123xzjok 从末尾追加写入数据
# 其中w和a模式下打开文件路径下未找到对应文件名的文件时,会重新创建对应的文件。
文件操作方法
文件读操作
# 文件a.txt
# 123
# 456
# 你好
# readline方法:读取文件一行内容
with open('a.txt'.'r',encoding='utf8') as f:
line = f.readline()
print(line) # 123\n
# readlines方法:读取文件每行内容以列表返回
with open('a.txt','r',encoding='utf8') as f1:
lines = f1.readlines()
print(lines) # ['123\n','456\n','你好\n']
# readable方法:查看文件是否是可读的
with open('a.txt','r',encoding='utf8') as f2:
print(f2.readable()) # True
文件写操作
# 文件a.txt
# 123
# write方法:写入内容,必须是字符串
with open('a.txt','w',encoding='utf8') as f:
f.write('你好') # 123你好
# writelines方法:写多行参数是列表,列表每个元素是一行内容
with open('a.txt','r',encoding='utf8') as f1:
lines = ['你好\n','456\n']
print(f1.writelines(lines))
# 123
# 你好
# 456
# writable方法:查看文件是否可写
with open('a.txt','w',encoding='utf8') as f2:
print(f2.writable()) # True
文件光标操作
# 文件a.txt
# xie123
# 你好
with open('a.txt','r',encoding='utf8') as f1:
f1.seek(1,0)
print(f1.read())
# ie123
# 你好
with open('a.txt','rb') as f2:
print(f2.readline())
f2.seek(3,1)
print(f2.read().decode('utf8'))
# 好
with open('a.txt','rb') as f3:
f3.seek(-3,2)
print(f3.tell()) # 11
print(f3.read().decode('utf8'))
# 好
# seek方法两个参数,第一个参数是移动的字节数正右负第二个参数是光标参考系模式
# 0 默认参考系模式,t、b模式下都能使用,以文件开头为参考系移动光标
# 1 只有b模式下才能使用,以当前光标位置移动光标
# 2 只有b模式下才能使用,以文件末尾为参考系移动光标
# tell方法返回文件头到光标位置的距离
文件修改
# 把一下文件中lin都修改成xie
# 文件a.txt
# john xie lin san lin lin lin
# 方法一
with open('a.txt','r',encoding='utf8') as f1:
data = f1.read()
with open('a.txt','w',encoding='utf8') as f2:
f2.write(data.replace('lin','xie'))
# 方法二
import os
with open('a.txt','r',encoding='utf8') as f1, \
with open('a.txt.temp','w',encoding='utf8') as f2:
for line in f1:
f2.write(line.replace('lin','xie'))
os.remove('a.txt')
os.rename('a.txt.temp','a.txt')
文件优化操作
read方法会一次性把数据都读到内存中,如果数据足够大那么将会是巨大的负担。
# 文件a.txt
# 123
# 你好
# 456
# 通过for循环获得每行内容
with open('a.txt','r',encoding='utf8') as f:
for line in f:
print(line)
# 123
# 你好
# 456
文件操作模式
# t文本模式
# 1.默认模式是文本模式
# 2.只能操作文本文件
# 3.必须指定encoding
# 4.文件操作都是以字符串为基础
# b二进制模式
# 1.该模式可操作任意文件
# 2.文件操作都是以bytes(字节)为基础
# 3.不用指定encoding

浙公网安备 33010602011771号