本文将介绍在python中在不改变原文件其它内容的条件下,插入或删除内容。
我们想要达到的效果是:在文件的任意行或位置插入或删除内容,不影响该位置前后的内容。
分为以下四种情况:
1. 替换某一行或者删除某行内容。
2. 在指定行后添加一行内容。
3. 替换文章中的某一内容(字符串)。
4. 删除文件中的某一关键词。
这里我们建议使用fileinput模块。首先简单介绍下这一模块:
fileinput模块可以对一个或者多个文件中的内容进行迭代,遍历等操作。使用这一模块可以方便的对文件进行遍历,格式化输出,查找,替换等操作。
基本用法是:
fileinput.input (files=None, inplace=False, backup='', bufsize=0, mode='r', openhook=None)
files: #文件的路径列表,默认是stdin方式,多文件['1.txt','2.txt',...]不同文件用逗号隔开。
inplace: #是否将标准输出的结果写回文件,默认不取代。如果设置为True则将操作结果就地写到原文件中。
backup: #备份文件的扩展名,如.bak。如果该文件的备份文件已存在,则会自动覆盖。
bufsize: #缓冲区大小,默认为0,如果文件很大,可以修改此参数。
mode: #读写模式,默认为只读。
openhook: #该钩子用于控制打开的所有文件,比如说编码方式等。
模块内置函数:
fileinput.input() #返回能够用于for循环遍历的对象。
fileinput.filename() #返回当前文件的名称。
fileinput.lineno() #返回当前已经读取的行的数量(或者序号)。
fileinput.filelineno() #返回当前读取的行的行号。
fileinput.isfirstline() #检查当前行是否是文件的第一行 。
fileinput.isstdin() #判断最后一行是否从stdin中读取 。
fileinput.close() #关闭队列 。
下面依次介绍各种情况的操作:
1. 替换某一行或者删除某行内容:
# Author:Allen Liu
# Data: 08/01/2017
'''
This program is an example of file modification use fileinput module
'''
import fileinput
for line in fileinput.input('data', backup='.bak',inplace = True):
# 删除含有某一关键词的行
if 'Beijing' in line:
pass
else:
print(line.rstrip())
# 替换掉还有某一关键词的行
print(line.rstrip().replace('Beijing!','Jinan!')
2. 在某一行后添加一行
# Author:Allen Liu
# Data: 07/27/2017
'''
This program is an example of file modification use fileinput module
'''
import fileinput
for line in fileinput.input('data', backup='.bak',inplace = True):
# 在指定行后添加一行
if fileinput.lineno() == 1:
print(line.rstrip())
print('Hello world!')
else:
print(line.rstrip())
3. 替换文件中的某一关键词
import fileinput
for line in fileinput.input('data', backup='.bak',inplace = True):
print(line.rstrip().replace('world!', 'China!'))
4. 删除文件中的某一关键词
import fileinput
for line in fileinput.input('data', backup='.bak',inplace = True):
print(line.rstrip().replace('China',''))