文件操作
以前总听别人说,把文件改成只读模式,也经常在文件属性中看到,是'只读',今天终于了解到一些相关的文件操作
模式
r 只读 r+ 读+写 w 覆盖写 w+ 先覆盖再写,然后再读 a 追加 a+ 追加读 只读: mode = "r"或"rb",读文件r 读字节rb
打开文件
f = open('文件名',mode = 'r',encoding='utf-8')
参数1:文件的名字,(必须是字符串)
参数mode:对这个文件的操作方式(模式)
参数encoding: 这个文件的编码集
f 文件句柄.所有对于文件的操作,都是操作文件句柄
文件路径:
绝对路径: 从磁盘查找额就是绝对路径
相对路径: 相对于某个文件的位置(推荐写法)
存放文件路径也必须是字符串类型,全部替换双斜杠,如果文件路径过长,在路径前加一个r,和\\一样,都是转义
读操作
f.read( ) 读, 一次性全部读取;如果文件过大,就会非常占用资源,导致内存崩溃
f.readline( ) 读取一行,但是尾部有一个\n(换行符);只用在读的时候最后加一个strip()就可以解决
f.readlines( ) 一行一行读取,,读取多行,都存放在列表里
for循环读 每一次循环只在内存中占一行数据,很节省内存
f = open('t1',mode = 'r',encoding = 'utf-8') mode = 'r',只读模式 read(),括号里的参数如果是单数,就代表读取的字符数量,例如read(3),就是读取前三个字 f = open('t1',mode = 'rb') mode = 'rb', 读取字节时不能指定编码集; read(3)在当前模式下,是读取三个字节
写操作
利用w 模式操作文件,如果文件不存在,就新建一个;mode = "w"或"wb" 写文件: w 写字节: wb (只写,没有读的功能)
f.write("新内容"),覆盖写,在写之前把文件清空
追加操作
mode = 'a', 在文件的末尾位置添加内容
r + 读+写 w + 写+读 a + 追加+读 f = open('t1',mode = 'r+',encoding = 'utf-8') 先读后写 f = open('t1',mode = 'w+',encoding = 'utf-8') 先写后读
f.seek() 移动光标位置,先写后读时光标默认是在最后,读取时需要把光标移动到最前面
例:
f = open('t1',mode = 'w+',encoding = 'utf-8') f.write("写的内容") f.seek( ) 移动光标位置 print(f.read())
f = open('t1',mode = 'a+',encoding= 'utf-8') 追加写+读
f.seek(0)
print(f.read())
f.write('')
..\ 返回上一级
f.flush() 刷新
上下文管理 with open
with open('文件路径',mode = '模式',encoding = 'utf-8')as f:
msg = f.read()
print(msg) 不用手动关闭文件,操作完成之后自动关闭
其他操作
f.seek(),移动光标的位置
f.tell(),查看光标的位置
f.truncate(),截取,指定光标的位置进行截取,按字节进行计算
with open("文件路径",mode = '模式',encoding='utf-8')as f:
pirnt(f.read())
print(f.tell()) tell 查看光标的位置,数的是字节
with open("文件路径",mode='模式',encoding='utf-8')as f:
f.trunca(9),截取9个字节,也就是3个字符,在python3中,要先手动移动光标,再进行 截取
seek参数:
双数字:0,0文件的头部;0,1光标当前的位置;0,2文件尾部
单数字:数字表示的是字节
os模式:
os.rename("旧的名字","新的名字")
os.remove("要删除的文件")
文件修改,要先做备份
with open("文件路径",mode= '模式',encoding='编码集')as f,\
open("文件路径",mode='模式',encoding='编码集')as f1:
f:原文件的句柄
f1:新文件的句柄
msg = f.read() 读取原文件的内容,临时存到msg变量中
s = msg.replace('被修改的内容','修改后的内容')
f1.write(s) 将修改的内容写到新的文件中, 原文件不动
ps:有一个弊端,当文件太大的时候,内存很容易溢出,需要用for循环
with open('文件路径',mode='模式',encoding='utf-8')as f,\
open('文件路径',mode='模式',encoding='utf-8')as f1:
for i in f: #一行一行的读取
msg = i.strip().replace("旧内容","新内容")
f1.write(msg) #将每行内容写入到新的文件中