如何在文本文件中搜索行的内容、替换行并另存为新文件?

2024-04-29 16:16:21 发布

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

我有一个包含以下内容的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)

很接近,但不是真的。它将搜索“deu 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.*$"但这不起作用。你知道吗


Tags: importlangeslinedefileenus
2条回答

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

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

不要浪费时间逐行读取文件。
一次将整个文件读入一个字符串。
使用下面的正则表达式处理字符串,然后重置
文件句柄并将字符串写入文件。你知道吗

优点:
-您有千兆字节的ram
-您可以更改regex以满足将来的任何搜索更改
需要跨行的,例如\[\s*de_DE\s*\],没有
需要修改任何语言代码。
-如果您决定解析xml标记而不可能拆分标记内容
基于任何在线信息。
(如果您需要,我可以给您一个正则表达式来完成此任务)


做一个回复sub()使用此

.*<!\[CDATA\[de_DE\]\]>.*(?:\r?\n)?

https://regex101.com/r/xy0AHj/1

相关问题 更多 >