python中在文件指定位置插入内容
- FileInput类
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')
- seek
def match_then_insert(filename, match, content):
"""匹配后在该行追加
:param filename: 要操作的文件
:param match: 匹配内容
:param content: 追加内容
"""
with open(filename, mode='rb+') as f:
while True:
try:
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')
消耗事件对比
方案 | 耗时/s |
---|---|
读进列表后覆盖原文件 | 54.42 |
FileInput类 | 121.59 |
seek | 3.53 |