我有一个包含损坏的XML的文件,在行尾有一些我想要清除的垃圾字符。这些垃圾字符不允许我使用Python的XML解析器。示例:
<request><pair><name>q</name><value><![CDATA[LOL]]></value></pair><pair><name>start</name><value>1</value></pair></request>�J I�i�Y�Y��'z�3�u�J�5��}���#Q/k;!�ˑ�9Q){_������ŐF
<request><pair><name>q</name><value><![CDATA[LOL2]]></value></pair><pair><name>start</name><value>1</value></pair></request>4/lIT�l��'�c�Oֲ�{�;��_?��(>͏Y�mP��
如何删除</request>
后的垃圾字符?或者换句话说,如何删除</request>
和<request>
之间的字符串?
请注意,从<request>
到</request>
只有一行,所以
代码:
awk '/<request>/ , /<\/request>/' test.txt
不起作用。
我的目的是提取名称为"q“时的值(在本例中为LOL和LOL2)。因此,如果可以很容易地做到这一点,我就不会为删除垃圾字符而烦恼。
谢谢您抽时间见我。
发布于 2012-01-05 11:58:01
您可以使用lxml和xpath表达式提取数据-
import lxml
from lxml import etree
source_xml = " path to your xml file"
et = etree.parse(source_xml)
value = et.xpath("//document/request/pair[name='q']/value/text()")
print " ".join(value)
我使用给定的xml示例尝试了一下,我的输出是'LOL LOL2'
发布于 2012-01-05 12:09:38
这是可行的,但这可能不是最有效的方法:
>>> f = open('x.txt','r')
>>> z = ["%s</request>" % x.split('</request>')[0] for x in f.readlines()]
发布于 2012-01-05 12:22:19
这将返回文件,包括行分隔符,没有任何垃圾字符。(注意:"with“语句是针对Python 2.6+的,对于以前的版本,只需打开(),然后打开.close()文件)
import re
clean = ''
with open('x.txt','r') as f:
clean = "".join([ line[:re.search('<\/request>',line).end()] for line in f ])
https://stackoverflow.com/questions/8741857
复制相似问题