Python基础知识之文件读写与修改

基本操作

f = open("file1", "r")  # 打开文件
first_line = f.readline() # 读一行
data = f.read() # 读取剩下所有内容,文件大时候不要用
f.close()  #关闭文件

如果我们想循环文件,并且在第九行输出分割的话:

for index, line in enumerate(file.readlines()):
    if(index == 5):
        print("-------我是分割线-------")
        continue
    print(line.strip())

注意: strip()方法是用来去除字符串首尾空格的

但是当我们打开一个大文件的时候我们就会发现一个问题,file.readlines()是提前将所有行数都先读取出来,再进行操作,那么当我们打开一个几十个G的文件的时候效果可想而知,因此上述方法基本不使用,应该使用以下方法:

count = 0
for line in file:
    if count == 9:
        print("-------我是分割线-------")
        count += 1
        continue
    print(line)
    count += 1

打开文件的模式有:

  • r, 只读模式(默认)
  • w,只写模式【不可读;不存在则创建;存在则删除内容】
  • a,追加模式【可读;不存在则创建;存在则只追加内容】

“+”表示可以同时读写某个文件

  • r+,可读写文件【可读;可写;可追加】-----一般使用这个模式
  • w+,可写读文件【可写;可读;可追加】-----基本用不到
  • a+,追加读写文件

“b”表示处理二进制文件(如:FTP发送上传ISO镜像文件,Linux可忽略,windows处理二进制文件时需要标注)

  • rb,以二进制的模式读取文件,不可以传encoding参数
  • wb,以二进制编码的模式写文件
    f.write("string字符串".encode())

“U”表示在读取时,可以将 自动转换成 (与r或r+模式同时使用)

  • rU
  • r+U

文件的方法

  • tell() 当前文件指向的指针,计数方式是按照字符个数
  • seek(字符位置) 查找文件相应字符位置
    seek(0)就是返回到文件开始位置,一般和tell()方法一起使用
  • encoding() 返回当前文件编码格式
  • flush() 刷新当前缓冲区,建议在关闭文件前先flush当前缓冲区。
模仿进度条:
	import sys, time
	for i in range(20):
	    sys.stdout.write("#")
	    sys.stdout.flush()
	    time.sleep(0.1)

在前面,我们已经注意到python写文件的时候,会将之前的内容删除掉,重写覆盖,那么我们如何来修改文件呢?

文件修改的方式

  • 将文件加载到内存中像VIM那样,再进行修改
  • 打开一个文件,修改完成之后写到新文件里

修改文件的思路

  1. 打开两个文件
  2. 从源文件逐行读取,边读边写进新文件中
  3. 通过语句进行判断,找到需要需改的地方,修改文件,再将修改过后的内容写到新文件中。
f = open("yesterday", 'r', encoding="utf-8")
fnew = open("yesterday.bak", "w", encoding="utf-8")

for line in f:
    if "修改前的语句" == line:
        line = line.replace("修改前的语句", "修改后的语句")
    fnew.write(line)
f.close()
fnew.close()

line = line.replace("修改前的语句", "修改后的语句") 注意是line而不是f

with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

with open("需要打开的文件", 'r', encoding="utf-8") as f:
    # 执行语句...
    # 当跳出with程序块时,自动关闭文件

如此方式,当with代码块执行完毕后,内部会自动关闭并释放文件资源。
在python2.7后,with又支持同时对多个文件的上下文进行管理,即:

with open("需要打开的文件1") as f, open("需要打开的文件2") as f2:
    # 执行语句...
    # 当跳出with程序块时,自动关闭文件
原文地址:https://www.cnblogs.com/bearkchan/p/8046494.html