我遇到.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
解决问题的最佳方法是什么?
答案 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有模块来处理它 - HTMLParser
,here 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
可能有助于保持一致性吗?