我正在使用this Python腳本將CSV轉換爲XML。轉換後,我在文本(vim)中看到標籤,這會導致XML解析錯誤。從文件中刪除<feff>
我已經嘗試從here的答案,但沒有成功。
轉換後的XML file。
感謝您的幫助!
我正在使用this Python腳本將CSV轉換爲XML。轉換後,我在文本(vim)中看到標籤,這會導致XML解析錯誤。從文件中刪除<feff>
我已經嘗試從here的答案,但沒有成功。
轉換後的XML file。
感謝您的幫助!
您的輸入文件具有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)
非常可怕的風格,但劇本是一起黑客腳本反正一次性的工作。
感謝您的幫助!我替換了relatd部分,但是我得到了這個錯誤:文件「x.py」,第26行,在
哪個python版本?如果版本3的open/read方法應該產生一個unicode字符串,並且要刪除第一個BOM字符,我提供的示例代碼就是告訴你可能會在後臺發生什麼 - 你可以做' s = s [1:]'這會起作用。學習尋找實際正在做的事情,並嘗試理解邏輯,而不是盲目地遵循解決方案。 – metatoaster
下面是一個腳本示例,該腳本使用真正的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:
簡單的答案是,不要使用Python腳本,它實際上並不知道如何編寫有效的XML。而不是試圖修復產生不良輸出的東西,而應該使用能夠以正確的方式完成工作的東西。 –
嗯!我將不勝感激任何其他建議爲通用cli csv2xml轉換器。 :) – Adrian
有沒有這樣的事情(和你鏈接到的不是一個),因爲沒有單一的,通用的方式來表示結構化語言中的表格語法。你指出的那個工具對於輸出應該是什麼樣子做了一些假設;對此它沒有任何「普遍性」。也就是說,如果澄清一下輸出結果應該是多少,幾乎任何有能力的開發人員都可以在五分鐘內寫出這樣的工具。 –