从文件中移除<feff>

2 投票
3 回答
7272 浏览
提问于 2025-04-17 22:02

我正在使用这个 Python脚本把CSV文件转换成XML格式。转换后,我在文本中看到了一些标签(在vim编辑器中),这导致了XML解析错误。

在这里输入图片描述

我已经尝试了这里的答案,但没有成功。

这是转换后的XML文件

谢谢大家的帮助!

3 个回答

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列的内容,你可以用XPath这样的方式来表示:/row[2]/col[3]/text()

10

将 utf-8 改成 utf-8-sig

import csv
with open('example.txt', 'r', encoding='utf-8-sig') as file:
10

你的输入文件里有BOM(字节顺序标记)字符,而Python在文件编码为utf8时不会自动去掉这些字符。你可以查看这个链接了解更多信息:在Python中读取带BOM字符的Unicode文件数据

>>> 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)

虽然这个写法很糟糕,但这个脚本本来就是为了临时使用而匆忙写的。

撰写回答