经过大量搜索后,我无法找到答案。 我想做的是,根据我的字符串进行字符串搜索并在其上方或下方的行上书写。
到目前为止,我已经完成了这件事:
file = open('input.txt', 'r+')
f = enumerate(file)
for num, line in f:
if 'string' in line:
linewrite = num - 1
???????
编辑扩展初步问题: 我已经选择了最能解决我最初问题的答案。但是现在使用Ashwini的方法我重写了文件,我怎么能搜索和替换字符串。更具体一点。
我有一个
的文本文件SAMPLE
AB
CD
..
TYPES
AB
QP
PO
..
RUNS
AB
DE
ZY
我想将AB
替换为XX
,仅限行SAMPLE
和RUNS
我已经尝试过多种使用replace()的方法。我试过像
if 'SAMPLE' in line:
f1.write(line.replace('testsample', 'XX'))
if 'RUNS' in line:
f1.write(line.replace('testsample', 'XX'))
那不起作用
答案 0 :(得分:3)
以下内容可用作模板:
import fileinput
for line in fileinput.input('somefile', inplace=True):
if 'something' in line:
print 'this goes before the line'
print line,
print 'this goes after the line'
else:
print line, # just print the line anyway
答案 1 :(得分:2)
您可能必须先读取列表中的所有行,如果条件匹配,则可以使用list.insert
with open('input.txt', 'r+') as f:
lines = f.readlines()
for i, line in enumerate(lines):
if 'string' in line:
lines.insert(i,"somedata") # inserts "somedata" above the current line
f.truncate(0) # truncates the file
f.seek(0) # moves the pointer to the start of the file
f.writelines(lines) # write the new data to the file
或者不存储所有行,您需要一个临时文件来存储数据,然后 将临时文件重命名为原始文件:
import os
with open('input.txt', 'r') as f, open("new_file",'w') as f1:
for line in f:
if 'string' in line:
f1.write("somedate\n") # Move f1.write(line) above, to write above instead
f1.write(line)
os.remove('input.txt') # For windows only
os.rename("newfile", 'input.txt') # Rename the new file