from fileinput import FileInput
def match_then_insert(filename, match, content):
"""匹配后在该行追加
:param filename: 要操作的文件
:param match: 匹配内容
:param content: 追加内容
for line in FileInput(filename, inplace=True): # 原地过滤
if match in line: # 每次读取一行
line = content + '\n' + line
print(line, end='') # 输出重定向到原文件
match_then_insert('test.txt', match='c', content='123')
读进列表后覆盖原文件
def match_then_insert(filename, match, content):
"""匹配后在该行追加
:param filename: 要操作的文件
:param match: 匹配内容
:param content: 追加内容
lines = open(filename).read().splitlines()
index = lines.index(match)
lines.insert(index, content)
open(filename, mode='w').write('\n'.join(lines))
match_then_insert('test.txt', match='c', content='123')
def match_then_insert(filename, match, content):
"""匹配后在该行追加
:param filename: 要操作的文件
:param match: 匹配内容
:param content: 追加内容
with open(filename, mode='rb+') as f:
while True:
line = f.readline() # 逐行读取
except IndexError: # 超出范围则退出
break
line_str = line.decode().splitlines()[0]
if line_str == match:
f.seek(-len(line), 1) # 光标移动到上一行
rest = f.read() # 读取余下内容
f.seek(-len(rest), 1) # 光标移动回原位置
f.truncate() # 删除余下内容
content = content + '\n'
f.write(content.encode()) # 插入指定内容
f.write(rest) # 还原余下内容
break
match_then_insert('test.txt', match='c', content='123')
消耗事件对比