Python 搜索并替换特定行下的字符串
如何进行搜索并替换字符串。更具体地说 我有一个文本文件Python 搜索并替换特定行下的字符串,python,replace,find,Python,Replace,Find,如何进行搜索并替换字符串。更具体地说 我有一个文本文件 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:
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'))
这不起作用。最简单的方法是逐行迭代文件,每次看到
示例或运行行以保存标志,意思是“前一行是我正在查找的”。任何其他行都将重置此标志。现在,在每次迭代中,您都要检查标志是否是在上一次迭代中设置的,如果是,您需要执行.replace
操作。最简单的方法是逐行迭代您的文件,每次看到示例或运行行以保存标志,意思是“上一行是我正在查找的”. 任何其他行都将重置此标志。现在,在每次迭代中,您都要检查标志是否是在上一次迭代中设置的,如果是,则执行.replace
操作。文件是Python中行的迭代器:
for line in file:
output.write(line) # save as is
if 'SAMPLE' in line or 'RUNS' in line:
line = next(file, "") # move to the next line
output.write(line.replace('AB', 'XX')) # save replacing AB with XX
支持紧跟另一个采样/运行行的采样/运行行,例如:
SAMPLE
SAMPLE
AB
你可以:
for line in file:
output.write(line) # save as is
while 'SAMPLE' in line or 'RUNS' in line:
line = next(file, "") # move to the next line
output.write(line.replace('AB', 'XX')) # save replacing AB with XX
文件是Python中行的迭代器:
for line in file:
output.write(line) # save as is
if 'SAMPLE' in line or 'RUNS' in line:
line = next(file, "") # move to the next line
output.write(line.replace('AB', 'XX')) # save replacing AB with XX
支持紧跟另一个采样/运行行的采样/运行行,例如:
SAMPLE
SAMPLE
AB
你可以:
for line in file:
output.write(line) # save as is
while 'SAMPLE' in line or 'RUNS' in line:
line = next(file, "") # move to the next line
output.write(line.replace('AB', 'XX')) # save replacing AB with XX
假设您不希望替换示例
下面的行,也不希望替换包含ABC
的行,那么如果您的文件每行包含的文本比您要查找的字符串多,那么这将更加健壮
valid_sections = set(('RUNS', 'SAMPLE'))
for raw_line in fobj_in:
clean_line = raw_line.strip()
if clean_line in valid_sections:
fobj_out.write(raw_line)
raw_line = next(fobj_in)
clean_line = raw_line.strip()
if clean_line == 'AB':
fobj_out.write(raw_line.replace('AB', 'XX'))
else:
fobj_out.write(raw_line)
else:
fobj_out.write(raw_line)
假设您不希望替换示例
下面的行,也不希望替换包含ABC
的行,那么如果您的文件每行包含的文本比您要查找的字符串多,那么这将更加健壮
valid_sections = set(('RUNS', 'SAMPLE'))
for raw_line in fobj_in:
clean_line = raw_line.strip()
if clean_line in valid_sections:
fobj_out.write(raw_line)
raw_line = next(fobj_in)
clean_line = raw_line.strip()
if clean_line == 'AB':
fobj_out.write(raw_line.replace('AB', 'XX'))
else:
fobj_out.write(raw_line)
else:
fobj_out.write(raw_line)
您应该明白,即使AB是行的一部分(CRAB->CRXX),这也会将“AB”替换为“XX”。@oleg:是的。你看到问题中的任何迹象表明它应该是另一种情况吗?没有,但任务表述对我来说似乎模棱两可。我决定提请大家注意这一点。此外,如果SAMPLE
是文件的最后一行,则此代码将引发一个异常。@kirelagin:我添加了处理位于最后一行的示例的代码。您应该理解,即使AB是行的一部分,这也会将“AB”替换为“XX”。@oleg:是的。你看到问题中的任何迹象表明它应该是另一种情况吗?没有,但任务表述对我来说似乎模棱两可。我决定提请大家注意这一方面。而且,如果SAMPLE
是文件的最后一行,则此代码将引发异常。@kirelagin:我已添加代码,用于处理有效\u节中最后一行clean\u中的SAMPLE,并且clean\u line==“AB”
对于任何输入,在代码中始终是False
。感谢您的指针。修正了。需要转到下一行以搜索AB
。您需要重新添加剥离的换行符。我只写原始行
,即非剥离行。clean_行
并非仅用于检查。clean_行在有效部分和clean_行==“AB”
对于任何输入,在代码中总是False
。感谢您的指针。修正了。需要转到下一行以搜索AB
。您需要重新添加剥离的换行符。我只写原始行
,即非剥离行。clean_行
并非仅用于检查。