文件操作

文件操作

文件打开方法

# 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
posted @ 2021-11-10 16:14  它叫鸮  阅读(87)  评论(0)    收藏  举报