Python 删除<;feff>;从文件中
我正在使用Python脚本将CSV转换为XML。转换后,我在文本(vim)中看到标记,这会导致XML解析错误 我已经试过了答案,但没有成功 转换后的XML 谢谢你的帮助 您的输入文件具有BOM(字节顺序标记)字符,当文件以utf8编码时,Python不会自动去除这些字符。见: 因此,对于您的具体情况,请尝试以下方法Python 删除<;feff>;从文件中,python,xml,linux,bash,Python,Xml,Linux,Bash,我正在使用Python脚本将CSV转换为XML。转换后,我在文本(vim)中看到标记,这会导致XML解析错误 我已经试过了答案,但没有成功 转换后的XML 谢谢你的帮助 您的输入文件具有BOM(字节顺序标记)字符,当文件以utf8编码时,Python不会自动去除这些字符。见: 因此,对于您的具体情况,请尝试以下方法 from io import StringIO s = StringIO(open(csvFile).read().decode('utf-8-sig')) csvData = c
from io import StringIO
s = StringIO(open(csvFile).read().decode('utf-8-sig'))
csvData = csv.reader(s)
非常糟糕的样式,但该脚本无论如何都是一个一次性工作的拼凑脚本。下面是一个脚本示例,它使用真正的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列的内容,可以使用类似XPath的
/row[2]/col[3]/text()
将utf-8更改为utf-8-sig
import csv
with open('example.txt', 'r', encoding='utf-8-sig') as file:
导入csv
打开('example.txt','r',encoding='utf-8-sig')作为文件:
简单的答案是不要使用Python脚本,因为它实际上不知道如何编写有效的XML。与其试图修复一些产生错误输出的东西,不如首先使用一些正确的方法来完成工作。嗯!如果您对universal cli csv2xml转换器有任何其他建议,我将不胜感激。:)没有这样的东西(您链接到的也不是),因为在结构化语言中不存在单一的、通用的表示表格语法的方法。您所指的工具对输出应该是什么样子做出了一系列假设;它没有什么“普遍性”。这就是说,在澄清了输出应该是什么之后,几乎所有有能力的开发人员都可以在五分钟内编写出这样一个工具。感谢您的帮助!我替换了relatt部分,但出现了以下错误:csvData:UnicodeEncodeError中for行中的文件“x.py”,第26行:“ascii”编解码器无法对133:ordinal位置的字符u'\u20ac'进行编码不在范围(128)内哪个python版本?如果版本3中的open/read方法应该生成一个unicode字符串,重点是去掉第一个BOM字符,我提供的示例代码是向您展示背景中可能发生的情况-您可以只执行
s=s[1:://code>,这将起作用。学习寻找实际正在做的事情,并尝试理解逻辑,而不是盲目地遵循解决方案。您需要从io import open为Python 2添加
import csv
with open('example.txt', 'r', encoding='utf-8-sig') as file: