我怎样才能取代'&'到'&'在python?

时间:2014-06-18 15:12:13

标签: python xml parsing replace

我遇到.replace()的问题。我的XML解析器不喜欢'&'但是会接受'& \ amp;'。我想使用.replace('&','&'),但这似乎不起作用。我一直收到错误:

lxml.etree.XMLSyntaxError: xmlParseEntityRef: no name, line 51, column 41

到目前为止,我已经尝试了一个简单的file=file.replace('&','&'),但这并不起作用。我也试过了:

xml_file = infile
file=xml_file.readlines()
for line in file:
        for char in line:
                char.replace('&','&')
infile=open('a','w')
file='\n'.join(file)
infile.write(file)
infile.close()
infile=open('a','r')
xml_file=infile

解决问题的最佳方法是什么?

4 个答案:

答案 0 :(得分:5)

str.replace创建并返回一个新字符串。它不能就地改变字符串 - 它们是不可变的。尝试更换:

file=xml_file.readlines()

file = [line.replace('&','&') for line in xml_file]

这使用list comprehension来构建相当于.readlines()的列表,但已经替换了。{/ p>

答案 1 :(得分:2)

str.replace()返回新字符串对象并进行更改。它不会就地更改数据。你忽略了返回值。

您希望将其应用于每一行:

file = [line.replace('&', '&') for line in file]

您可以使用fileinput() module进行转换,并让它处理替换原始文件(将进行备份):

import fileinput
import sys

for line in fileinput.input('filename', inplace=True):
    sys.stdout.write(line.replace('&', '&'))

答案 2 :(得分:1)

...喔 您需要为特殊符号解码HTML表示法。 Python有模块来处理它 - HTMLParserhere some docs

以下是示例:

import HTMLParser

out_file = ....    
file = xml_file.readlines()
parsed_lines = []
for line in file:
     parsed_lines.append(htmlparser.unescape(line))

答案 3 :(得分:0)

稍微偏离主题,但使用一些转义可能会好吗?

我经常使用urllib的引用将HTML转入和转出:

 result=urllib.quote("filename&fileextension")
 'filename%26fileextension'
 urllib.unquote(result)
 filename&fileextension

可能有助于保持一致性吗?