with open(‘a.text‘,mode=‘r‘,encoding=‘utf-8‘)as a:
a.read() # 读取文件内容
a.readline() # 读取一行
a.readlines() # 读取所有行
a.readable() # 判断是否可读
a.read(5) # 读取几个字符,如果在rb模式下,则是读几个字节,如果存在3个字节的汉字,只读了1个字节或者2个字节,解码会报错
只有t模式下的read(n)代表的是字符个数,除此之外全都是字节个数
# c.text :helloword你好
with open(‘c.text‘,mode=‘rt‘,encoding=‘utf-8‘) as a:
print(a.read(10)) # helloword你
with open(‘c.text‘,mode=‘rb‘) as a :
print(a.read(3)) # b‘hel‘
with open(‘c.text‘,mode=‘rb‘) as a :
print(a.read(10)) # b‘helloword\xe4‘ 如果使用decode()解码,因为只读到‘你’的第一个字节,会报错
with open(‘a.text‘,mode="w",encoding="utf-8") as a:
a.write() # 写文件内容,一次写完
a.writelines() # 写文件内容,一个一个写
a.flush() # 刷新,直接把内容从内存中存入硬盘中,实时性使用
0 模式:参照文件开头移动n个字节 # (0,0) 参照文件开头,移动0个字节
1 模式:参照当前所在的位置移动n个字节 # (1,1) 参照当前位置,移动1个字节
2 模式:参照文件末尾位置移动n个字节 # (-2,2) 参照末尾,向左移动2个字节
注意:只有 0 模式可以在 t 下使用, 1 和 2 模式都只能在 b 下使用
永远从开头开始截断,n个字节。
# a.txt : hello你好
with open(‘a.txt‘,mode = ‘at‘,encoding=‘utf-8‘) as a:
f.truncate(6) # 会乱码,因为‘你’占用3个字节,截取后只取了‘你’的1个字节
1、将文件内容一次性全部读入内存
2、在内存中将内容修改完毕
3、将新内容写回原文件
with open(‘c.text‘,mode=‘rt‘,encoding=‘utf-8‘) as a:
res = a.read()
with open(‘c.text‘,mode =‘wt‘,encoding="utf-8") as a:
a.write(res.replace(‘egon‘,"EGON"))
1、以读的方式打开源文件,以写的方式打开一个临时文件
2、从源文件中读出一行内容到内存中,修改完毕后再写入临时文件,循环往复直到读完原件
3、删除源文件,将临时文件名改为源文件名
import os
with open(‘c.text‘,mode=‘rt‘,encoding=‘utf-8‘) as a, open(‘.c.text.swp‘,mode=‘wt‘,encoding=‘utf-8‘)as b:
for i in a:
b.wtite(res.replace(‘egon‘,‘EGON‘))
os.remobe(‘c.text‘)
os.rename(‘.c.text.swp‘,‘c.text‘)
原文:https://www.cnblogs.com/BaiJiaZhengMing/p/14594332.html