首页 > 解决方案 > 如何在文本文件中搜索某行的内容、替换该行并另存为新文件?

问题描述

我有一个包含以下内容的 xml 文件:

<supported-languages>
 <lang><![CDATA[en_US]]></lang>
 <lang><![CDATA[es_ES]]></lang>
 <lang><![CDATA[de_DE]]></lang>
</supported-languages>

<2ndsupported-languages>
 <lang><![CDATA[en_US]]></lang>
 <lang><![CDATA[es_ES]]></lang>
 <lang><![CDATA[de_DE]]></lang>
</2ndsupported-languages>

我只想删除任何包含de_DE的行,然后保存文件。

到目前为止,我有这个:

import fileinput
import sys

file = "C:\\Users\Desktop\file.xml"
searchExp = "de_DE"
replaceExp = ""


def replaceAll(file,searchExp,replaceExp):
    for line in fileinput.input(file, inplace=1):
        line = line.replace(searchExp,replaceExp)
        sys.stdout.write(line)

replaceAll(file,searchExp,replaceExp)

关闭,但不是真的。它将搜索“de_DE”,但只会将其替换为<null>. 这是结果:

<supported-languages>
 <lang><![CDATA[en_US]]></lang>
 <lang><![CDATA[es_ES]]></lang>
 <lang><![CDATA[]]></lang>
</supported-languages>

<2ndsupported-languages>
 <lang><![CDATA[en_US]]></lang>
 <lang><![CDATA[es_ES]]></lang>
 <lang><![CDATA[]]></lang>
</2ndsupported-languages>

我希望我的结果看起来像这样

<supported-languages>
 <lang><![CDATA[en_US]]></lang>
 <lang><![CDATA[es_ES]]></lang>
</supported-languages>

<2ndsupported-languages>
 <lang><![CDATA[en_US]]></lang>
 <lang><![CDATA[es_ES]]></lang>
</2ndsupported-languages>

我该怎么做呢?

我试图import re然后替换pattern为, pattern = "^.*de_DE.*$"但没有奏效。

标签: pythonregex

解决方案


只写不包含子字符串的行searchExp

def replaceAll(file, searchExp):
    for line in fileinput.input(file, inplace=1):
        if searchExp not in line:
            sys.stdout.write(line)

推荐阅读