在python里,我们可以通过open()方法打开文件并且用内置方法处理文件内容。
需要注意的是,open() 会默认自动转换为2进制再存储(write方法执行时)。所以open命令也是在2进制的基础上进行存储的。
obj = open(file='路径',mode='模式',encoding='编码') obj.write() # 可写模式下 obj.read() # 可读模式下 obj.close()
- 操作字符串
- r/w/a
- r+/w+/a+
- 直接操作2进制
- rb/wb/ab
- r+b/w+b/a+b
read() #全部读入内存
read(2) r模式下2表示读取前两个字符(不是字节),当rb模式,就是读取2个字节了
write(str) #w模式下,写入字符串
wb模式下写入的是2进制,所以字符串需要decode到2进制进行写入:
'obj.write(你好'.decode(utf-8))
- seek(光标字节的位置) #无视打开模式都是字节
- tell() #获取光标当前所在的字节位置
flush() #强制将写入内存的数据刷到硬盘上,相当于保存到硬盘
文件不关闭,就会浪费资源。有时候写代码的时候会忘记close()
推荐文件打开方法: with open(file='路径',mode='模式',encoding='编码') as f: # 相当于 f = open(file='路径',mode='模式',encoding='编码') data = read() # 下一行会自动缩进, # 缩进里的代码执行完毕后自动关闭
同时打开复数个文件: with open(file='路径',mode='模式',encoding='编码') as f1,open(file='路径',mode='模式',encoding='编码') as f2:
对文件的写入是不能插入的(硬盘写入的规则)
所以当想插入的时候,需要先把文件内容全部读入内存,然后修改之后重新全部写入。
- 大文件修改
如果文件过大。那我们可以用一个temp文件来作为过渡文件。
读取文件第一行(或者一定数量的字节),在内存修改,a模式写入temp文件。
全部写入temp文件后,temp文件用os.replace()来覆盖原文件。
## 一边读行,一边修改,一边写入新文件 import os old_file = r'C:\Users\kouneli\Desktop\python\temp\test.txt' new_file = r'C:\Users\kouneli\Desktop\python\temp\test_new.txt' f = open(old_file,'r') f_new = open(new_file,'a') old_str = 'o' new_str = 'K' for line in f: if old_str in line: line = line.replace(old_str,new_str) f_new.write(line) f.close() f_new.close() os.replace(new_file,old_file) # 吧新文件名字改成源文件的名字,就把之前的覆盖掉了。 mac使用os.rename()