文章目录
1、read

f=open("../Resource/test.txt",encoding="utf-8")
data=f.read()
print(data)
f.close()
输出:
无聊望见了犹豫 达到理想不太易
即使有信心 斗志却抑止
谁人定我去或留 定我心中的宇宙
只想靠两手向理想挥手
问句天几高心中志比天更高
自信打不死的心态活到老
f=open("../Resource/test.txt",encoding="utf-8")
data=f.read(2)
print(data)
f.close()
输出:无聊
2、readline
用于从文件读取整行,包括 “\n” 字符。
f=open("../Resource/test.txt",encoding="utf-8")
data=f.readline()
print(data,end='')
f.close()
输出:
无聊望见了犹豫 达到理想不太易
3、readlines
f=open("../Resource/test.txt",encoding="utf-8")
data=f.readlines()
print(data,end='')
f.close()
输出:
[‘无聊望见了犹豫 达到理想不太易\n’, ‘即使有信心 斗志却抑止\n’, ‘谁人定我去或留 定我心中的宇宙\n’, ‘只想靠两手向理想挥手\n’, ‘问句天几高心中志比天更高\n’, ‘自信打不死的心态活到老\n’]
4、readable
是否可读
f=open("../Resource/test.txt",encoding="utf-8")
print(f.readable())
f.close()
输出:
True
5、write
#“w”模式,打开文件,如果文件存在,会清空文件里的内容
f=open("../Resource/test.txt","w",encoding="utf-8")
f.write("无聊望见了犹豫 达到理想不太易\n")
f.close()

只能写入字符串,不能写入整数,不然报错
f=open("../Resource/test.txt","w",encoding="utf-8")
f.write(1) #文件内容只能是字符串
f.close()
输出:TypeError: write() argument must be str, not int
5、writeable
是否可写
f=open("../Resource/test.txt","w",encoding="utf-8")
print(f.writable())
f.close()
输出:
True
6、writelines
f=open("../Resource/test.txt","w",encoding="utf-8")
f.writelines(["无聊望见了犹豫 达到理想不太易\n","即使有信心 斗志却抑止\n"])
f.close()

7、追加模式

f=open("../Resource/test.txt","a",encoding="utf-8")
f.write("即使有信心 斗志却抑止\n")
f.close()
执行结果:

8、修改文件内容

src_f=open("../Resource/test.txt","r",encoding="utf-8")
data=src_f.readlines()
src_f.close()
des_f=open("../Resource/testNew.txt","w",encoding="utf-8")
des_f.writelines(data[0])
des_f.close()
结果:

9、自动close
with open("../Resource/test.txt","r",encoding="utf-8") as f:
data=f.read() #执行完这句自动,执行f.close()
print(data)
10、打开多个文,自动close
with open("../Resource/test.txt","r",encoding="utf-8") as src_f, \
open("../Resource/testNew.txt", "r", encoding="utf-8") as des_f:
data=src_f.read()
des_f.write(data)
11、rb
打开文件默认是t,即“r”模式默认是“rt”
对于视频、图片和其他文件,可以用b的模式打开
f=open("../Resource/test.txt", "rb")
data=f.read()
print(data)
print(data.decode(encoding="utf-8"))
输出:
b’\xe6\x97\xa0\xe8\x81\x8a\xe6\x9c\x9b\xe8\xa7\x81\xe4\xba\x86\xe7\x8a\xb9\xe8\xb1\xab \xe8\xbe\xbe\xe5\x88\xb0\xe7\x90\x86\xe6\x83\xb3\xe4\xb8\x8d\xe5\xa4\xaa\xe6\x98\x93\r\n’
无聊望见了犹豫 达到理想不太易
12、wb
f=open("../Resource/test.txt", "wb")
f.write("无聊望见了犹豫 达到理想不太易\n".encode(encoding="UTF-8"))
f.write(bytes("即使有信心 斗志却抑止\n",encoding="utf-8"))
f.close()

13、closed
判断文件是否关闭
f=open("../Resource/test.txt")
print(f.closed) #False
f.close()
print(f.closed) #True
输出:
False
True
14、encoding
获取的是open打开的编码,不是文件存的编码
f=open("../Resource/test.txt")
print(f.encoding) #cp936其实就是GBK,IBM在发明Code Page的时候将GBK放在第936页,所以叫CP936
f.close()
f=open("../Resource/test.txt",encoding="utf-8")
print(f.encoding)
f.close()
输出:
cp936
utf-8
15、flush
将缓存数据写入磁盘
16、tell

f=open("../Resource/test.txt",encoding="utf-8")
print(f.tell()) #当前光标所在位置
f.readline()
print(f.tell())
f.close()
输出:
0
13
17、seek
17.1、seek移动的单位是字节
read(3)代表3个字符,其余的文件内光标移动都是以字节为单位如seek,
utf-8编码中一个汉字有3个字节

f=open("../Resource/test.txt",encoding="utf-8",newline="")
f.seek(1)
data=f.read()
print(data)
f.close()
输出报错:
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb8 in position 0: invalid start byte
原因:seek(1)表示一个字节,汉字utf-8表示三个字节,故报错
f=open("../Resource/test.txt",encoding="utf-8")
f.seek(3)
data=f.readlines()
print(data)
f.close()
输出:
[‘再犹豫\n’]
17.2、seek总是相对于文 件开始位置移动
f=open("../Resource/test.txt","r+",encoding="utf-8")
f.seek(12)
print(f.tell())
f.seek(3) #seek总是相对于文 件开始位置移动
print(f.tell())
f.close()
输出:
12
3
17.3、seek的三种模式
17.3.1、默认为0模式
f=open("../Resource/test.txt","rb") #以b模式打开不能用encoding
f.seek(12) #seek默认用0模式
print(f.tell())
f.seek(3,0) #0模式,即绝对位置
print(f.tell())
f.close()
17.3.2、1模式为相对们置
f=open("../Resource/test.txt","rb") #以b模式打开不能用encoding
f.seek(12) #seek默认用0模式
print(f.tell())
f.seek(3,1) #1模式,即相对位置
print(f.tell())
f.close()
输出:
12
15
17.3.3、2模式相对于文 件末尾开始

f=open("../Resource/test.txt","rb") #以b模式打开不能用encoding
f.seek(-5,2) #相对于文件末尾开始,再向前移动5字节
print(f.tell())
data=f.read()
print(data)
f.close()
输出:
21
b’abc\r\n’
18、truncate
指定一个位置,并截断,截断后的内容被删除

f=open("../Resource/test.txt","r+",encoding="utf-8")
#打开模式不能是w+和w,因为这种模式会删除文件的内容
#删除了,就截取不了了
f.truncate(3) #保留三个字节(即一个汉字),其余的全删除
data=f.read()
print(data)
f.close()
输出:无

19、文件打开模式
| 模式 | 描述 |
|---|---|
| t | 文本模式 (默认)。 |
| x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
| b | 二进制模式。 |
| + | 打开一个文件进行更新(可读可写)。 |
| U | 通用换行模式(不推荐)。 |
| r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
| rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
| r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
| rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
| w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
| w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
| a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
| ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
20、循环文件的推荐方式

f=open("../Resource/test.txt","r",encoding="utf-8")
#会一行一行从文件中读取,相对于f.readlines()等减少内存开销
for i in f:
print(i,end="")
输出:
无聊望见了犹豫 达到理想不太易
即使有信心 斗志却抑止
谁人定我去或留 定我心中的宇宙
只想靠两手向理想挥手
问句天几高心中志比天更高
自信打不死的心态活到老
21、读取文件最后一行

f=open("../Resource/test.txt","rb") #用seek时,要以b模式打开
for i in f:
offset=-10 #做个估算
while True:
f.seek(offset,2)
data=f.readlines()
if len(data)>1:
print("文件的最后一行是:%s" %(data[-1].decode("utf-8")))
break
offset *= 2
输出:
文件的最后一行是:自信打不死的心态活到老
本文详细介绍了Python中文件操作的各种方法,包括read、readline、readlines等读取方法,write、writelines等写入方法,以及seek、tell等文件定位方法。同时,还讲解了文件打开模式、自动关闭文件、二进制文件读写等高级技巧。

1636

被折叠的 条评论
为什么被折叠?



