0

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

我有一个文本文件

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

我想ABXX, 仅在行SAMPLE和下替换RUNS。我已经尝试过多种使用方式replace()。我尝试了类似的东西

if 'SAMPLE' in line:
    f1.write(line.replace('testsample', 'XX'))
if 'RUNS' in line:
    f1.write(line.replace('testsample', 'XX'))

那没有用。

4

3 回答 3

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
于 2013-06-02T09:05:32.817 回答
2

最简单的方法是逐行迭代你的文件,每次你看到一个SAMPLEorRUNS行来保存一个标志,意思是“前一行是我正在寻找的那个”。任何其他行都将重置此标志。现在在每次迭代中检查标志是否在前一次迭代中设置,如果是你做你.replace的事情。

于 2013-06-02T09:01:05.890 回答
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)
于 2013-06-02T11:18:55.830 回答