[英]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)?
只写不包含子字符串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.