文件操作:
r 读
w 写 只能覆盖写,先清空后写入
a 在文件文本末尾追加
r+ 读写 必须先读
w+ 写读
a+追加写读
b 使用吧的时候不能写编码集,b操作的是字节
rb 读取非文本文件
wb 可以不指定打开文件编码,但是写文件的时必须将字符串转化utf-8的bytes数据
ab
字节不能添加编码集,写mp3,mp4,mp5,图像,非文本
read() 默认全部读完,可以指定读几个
readline 读取行, 默认跟 (换行), (回车)
路径:推荐使用相对路径
相对路径:从磁盘跟目录开始一直到文件名
绝对路径: 同一个文件夹下的文件,相对于当前这个程序所在的文件夹而言
如果早同一个文件夹中,则相对路径就是这个文件名,如果在上一层文件夹,则要 ../
循环读取
f= open("../t.txt",mode="r",encoding="utf-8")
for line in f:
print(line.strip())
f.flush () #刷新
f.close() #关闭
光标的操作:
seek(0) #光标移动到开头
seek(0,2) #将光标移动到结尾
seek(3) 单个参数是字节数
seek(0,1) #两个参数就是表示光标调整到当前位置
seek(0,0) #两个参数就是表示光标调整到开始位置
seek(0,2) #两个参数就是表示光标调整到末尾位置
tell() 可以找到光标的位置
truncate() 截断文件
f=open("t.txt",mode="w",encoding="utf-8")
f.write("哈哈")
f.seek(3)
f.truncate() #删掉光标后面的所有内容
f.close()
###########坑##########
在r+模式下,如果读取了内容,不论读取内容多少,光标显示的是多少,再写入或者操作文件的时候都在结尾进行操作
############坑##########
修改文件:
import os
with open("t.txt",mode="r",encoding="utf-8")as f,
open ("s.txt",mode="w",encoding="utf-8")as f1:
content=f.read()
new_content=content.replace("冰糖葫芦","鸭梨")
f2.write("s.txt")
os.remove(t.txt) #删除源文件
os.rename(s.txt) #重新命名文件
弊端:一次将所有内容进行读取,内存溢出,
解决方案: 一行一行的读取和操作
import os
with open("t.txt",mode="r",encoding="utf-8")as f,
open ("s.txt",mode="w",encoding="utf-8")as f1:
for i in f:
s.txt_line=line.replace("鸭梨","冰糖葫芦")
f1.write(s.txt_line)
os.remove("t.txt")
os.rename("s.txt",t.txt)