python3 文件处理进阶,对文件的增删改查操作

  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('\n因为宇宙不是童话。')  # 对存到内存中的列表li进行列表操作,append(),在末尾进行追加
7     for i in li:  # 对列表进行遍历,把每一行写入原文件中。此时:因为w模式打开文件,文件内容为空!
8         f2.write(i)
 
 
 
扫描二维码关注公众号,回复: 1450800 查看本文章

猜你喜欢

转载自www.cnblogs.com/QQL-anatkh/p/9116867.html