我正在使用this Python脚本将CSV转换为XML。转换后,我看到文本中的标签(vim),这会导致XML解析错误。
我已经尝试过here的答案,但没有成功。
转换后的XML file。
感谢您的帮助!
答案 0 :(得分:7)
您的输入文件具有BOM(字节顺序标记)字符,并且当文件以utf8编码时,Python不会自动删除它们。请参阅:Reading Unicode file data with BOM chars in Python
>>> s = '\xef\xbb\xbfABC'
>>> s.decode('utf8')
u'\ufeffABC'
>>> s.decode('utf-8-sig')
u'ABC'
因此,针对您的具体情况,请尝试
from io import StringIO
s = StringIO(open(csvFile).read().decode('utf-8-sig'))
csvData = csv.reader(s)
非常糟糕的风格,但是这个剧本无论如何都是一个黑客攻击的剧本。
答案 1 :(得分:1)
将utf-8更改为 utf-8-sig
import csv with open('example.txt', 'r', encoding='utf-8-sig') as file:
答案 2 :(得分:0)
以下是使用真正的XML感知库来运行类似转换的脚本示例。它没有完全相同的输出,但是,它是一个例子 - 盐味。
import csv
import lxml.etree
csvFile = 'myData.csv'
xmlFile = 'myData.xml'
reader = csv.reader(open(csvFile, 'r'))
with lxml.etree.xmlfile(xmlFile) as xf:
xf.write_declaration(standalone=True)
with xf.element('root'):
for row in reader:
row_el = lxml.etree.Element('row')
for col in row:
col_el = lxml.etree.SubElement(row_el, 'col')
col_el.text = col
xf.write(row_el)
要引用第2行第3列的内容,您可以使用类似/row[2]/col[3]/text()
的XPath。