搜索并替换特定lin下的字符串

2024-07-02 12:47:38 发布

您现在位置:Python中文网/ 问答频道 /正文

如何进行搜索并替换字符串。更具体地说。在

我有一个文本文件

SAMPLE  
AB  
CD  
..  
TYPES  
AB  
QP  
PO  
..  
RUNS  
AB  
DE  
ZY 

我想将AB替换为XX,只在SAMPLERUNS行下。我已经尝试过多种使用replace()的方法。我试过

^{pr2}$

但那没用。在


Tags: sample方法字符串abrunscddereplace
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

支持跟在另一个样本/管路之后的采样/管路,例如:

^{pr2}$

你可以:

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

最简单的方法是逐行迭代文件,每次看到SAMPLERUNS行来保存一个标志,意思是“前一行就是我要找的那一行”。任何其他行都将重置此标志。现在,在每次迭代中,您都要检查是否在上一次迭代中设置了标志,以及是否执行了.replace操作。在

假设您不希望替换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)

相关问题 更多 >