python3 文件处理进阶
对文件的增删改查操作,主要原理是:把原文件的数据读到内存中,再在内存中进行增删改查等一系列操作,最后把改好的内容重新存入硬盘
我们直接来看例子:
有文件'诗歌'如下内容:
昔人已乘黄鹤去,此地空余黄鹤楼。
黄鹤一去不复返,白云千载空悠悠。
晴川历历汉阳树,芳草萋萋鹦鹉洲。
日暮乡关何处是?烟波江上使人愁。
part1:删除第三行
既然要删除第三行,那就要把原有的内容读取到内存中,保存下来,再对文件进行修改
方法一:
1 # 打开文件,用只读'r'的模式打开,把数据读到内存中
2 f = open("诗歌",'r',encoding="utf-8")
3 li = f.readlines() # readlines()把文件一行一行读出来,并存成一个列表
4 f.close() # 关闭文件
5
6 # 再次打开同一文件,这次采用w模式,对文件进行覆盖修改
7 with open("诗歌",'w',encoding="utf-8") as f2:
8 li.pop(2) # 对存到内存中的列表li进行列表操作,pop(index),去掉索引出的值,即第三行
9 for i in li: # 对列表进行遍历,把每一行写入原文件中。此时:因为w模式打开文件,文件内容为空!
10 f2.write(i)
方法二:
1 import os
2
3 p = '诗歌'
4 file = open(p, 'r', encoding='utf-8') # 把内容读到内存中
5
6 pnew = '%s.new' % p
7 filenew = open(pnew, 'w', encoding='utf-8') # filenew为空文件
8
9 str1 = '晴川历历汉阳树,芳草萋萋鹦鹉洲。'
10 for i in file: # 对文件进行遍历,读出每一行
11 if str1 in i: # 如果要删除的部分在这一行
12 i = '' # 这一行赋值为空,如要修改为其他内容,则赋值为其他内容
13 filenew.write(i) # 写入新文件filenew
14 else:
15 filenew.write(i) # 没有修改目标,则原封不动的把'诗歌'文件中的内容写入新文件
16 file.close() # 关闭'诗歌'文件
17 filenew.close()
18 os.replace(pnew, p) # windows下,引用os模块,os.replace(new,old)对文件重命名
方法三:
1 import os
2
3 a = '诗歌'
4 b = '诗歌2'
5 with open(a, 'r', encoding='utf-8') as f:
6 with open(b, 'w', encoding='utf-8') as f2:
7 for i in f:
8 if '晴川历历汉阳树,芳草萋萋鹦鹉洲。' in i:
9 pass
10 else:
11 f2.write(i)
12 os.replace(b, a)
part2:增加‘因为宇宙不是童话。’到最后一行
依然通过列表操作,进行追加
1 f = open("诗歌",'r',encoding="utf-8") # 打开文件,用只读'r'的模式打开,把数据读到内存中
2 li = f.readlines() # readlines()把文件一行一行读出来,并存成一个列表
3 f.close() # 关闭文件
4
5 with open("诗歌",'w',encoding="utf-8") as f2: # 再次打开同一文件,这次采用w模式,对文件进行覆盖修改
6 li.append('
因为宇宙不是童话。') # 对存到内存中的列表li进行列表操作,append(),在末尾进行追加
7 for i in li: # 对列表进行遍历,把每一行写入原文件中。此时:因为w模式打开文件,文件内容为空!
8 f2.write(i)