第四章 python的文件操作

在python里,我们可以通过open()方法打开文件并且用内置方法处理文件内容。

需要注意的是,open() 会默认自动转换为2进制再存储(write方法执行时)。所以open命令也是在2进制的基础上进行存储的。

4.1 文件基本操作

obj = open(file='路径',mode='模式',encoding='编码')
obj.write()  # 可写模式下
obj.read()  # 可读模式下
obj.close()

4.2 打开模式

  • 操作字符串
    • r/w/a
    • r+/w+/a+
  • 直接操作2进制
    • rb/wb/ab
    • r+b/w+b/a+b

4.3 文件操作

  • read() #全部读入内存

    read(2) r模式下2表示读取前两个字符(不是字节),当rb模式,就是读取2个字节了

  • write(str) #w模式下,写入字符串

    wb模式下写入的是2进制,所以字符串需要decode到2进制进行写入: 'obj.write(你好'.decode(utf-8))

  • seek(光标字节的位置) #无视打开模式都是字节
  • tell() #获取光标当前所在的字节位置
  • flush() #强制将写入内存的数据刷到硬盘上,相当于保存到硬盘

4.4 文件关闭

文件不关闭,就会浪费资源。有时候写代码的时候会忘记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:

4.5 文件的修改

对文件的写入是不能插入的(硬盘写入的规则)
所以当想插入的时候,需要先把文件内容全部读入内存,然后修改之后重新全部写入。

  • 大文件修改
    如果文件过大。那我们可以用一个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()

猜你喜欢

转载自www.cnblogs.com/py-xiaoqiang/p/11030888.html