Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除<;feff>;从文件中_Python_Xml_Linux_Bash - Fatal编程技术网

Python 删除<;feff>;从文件中

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

我正在使用Python脚本将CSV转换为XML。转换后,我在文本(vim)中看到标记,这会导致XML解析错误

我已经试过了答案,但没有成功

转换后的XML

谢谢你的帮助

您的输入文件具有BOM(字节顺序标记)字符,当文件以utf8编码时,Python不会自动去除这些字符。见:

因此,对于您的具体情况,请尝试以下方法

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: