繁体   English   中英

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

[英]How do I search for contents of a line in a text file, replace the line, and save as a new file?

我有一个包含以下内容的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.*$"但这没有用。

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

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


使用此做一个re.sub()

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

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

只写不包含子字符串searchExp

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM