在特定行下搜索并替换字符串

时间:2013-06-02 08:56:33

标签: python replace find

如何搜索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'))

这不起作用。

3 个答案:

答案 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)

最简单的方法是逐行迭代您的文件,每次看到SAMPLERUNS行以保存标记时,“前一行是我要查找的那一行”。任何其他行都将重置此标志。现在,在每次迭代中,检查是否在上一次迭代期间设置了标志,如果是,则执行.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)