如何搜索AND REPLACE字符串。更具体一点。
我有一个
的文本文件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)
文件是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 / RUNS行之后的SAMPLE / RUNS行,例如:
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
答案 1 :(得分:2)
最简单的方法是逐行迭代您的文件,每次看到SAMPLE
或RUNS
行以保存标记时,“前一行是我要查找的那一行”。任何其他行都将重置此标志。现在,在每次迭代中,检查是否在上一次迭代期间设置了标志,如果是,则执行.replace
事。
答案 2 :(得分:1)
假设您不希望替换SAMPLES
以下的行并且您不想替换包含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)