1
我需要使用python解析XML文檔(TMX map format)中的一些CSV數據,但我被卡住了。解析XML文檔中的CSV文件
我想使用標準的svg和ElTree模塊,如果可能的話,我必須使用Python 2.7。
這是XML文檔的片斷我的工作:
<layer name="Foreground" width="60" height="60">
<data encoding="csv">
0,0,0,0,0,1264,1265,1266,1267,
1268,1269,1270,0,0,0,0,0,0,
</data>
</layer>
這是代碼,我用它來打開該文件,並嘗試分析CSV數據的片段:
import xml.etree.ElementTree as ET
import csv
self.tree = ET.parse('town.tmx')
self.root = self.tree.getroot()
self.bg = []
for layer in self.root.findall('layer'):
self.data = layer.find('data').text
self.reader = csv.reader(self.data)
for row in self.reader:
for col in self.reader:
print col
self.bg.append(col)
但打印在這每一個元素的結果:
['0']['', '']['0']['', '']['0']['', '']['0']
所以,我試圖取代
self.reader = csv.reader(self.data)
與
self.reader = csv.reader([self.data])
但現在得到的錯誤:
csv.Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
往上看,建議將參數應用到open()函數的CSV模塊的文檔,但它在這裏顯然是不可能的。
我試圖用itertext,而不是文字來獲取數據,如:
for layer in self.root.findall('layer'):
self.data = layer.find('data')
self.string = "".join(self.data.itertext())
self.reader = csv.reader([self.string])
for row in self.reader:
for col in self.reader:
print col
self.bg.append(col)
,但我得到了同樣的錯誤。
我的猜測是,ElTree函數findAll與格式不正確更換EOL字符,但我不知道如何從這裏出發......
什麼會CSV數據看,如果是從XML的片段正確地提取它像在你的問題?它有多少行?如果只有一個,你應該[編輯]你的問題,並添加至少兩個片段。 – martineau
[TMX地圖格式](http://doc.mapeditor.org/reference/tmx-map-format/)鏈接中的信息[不多說](http://doc.mapeditor.org/reference/tmx-map-format /#data)關於數據在編碼=「csv」'時的格式。你有更好的參考?否則,如果沒有一個更完整的實際數據的例子,這全是猜測...... – martineau