2015-11-19 131 views
1

我試圖使用字符串格式化傳入的CSV轉換爲XML,我發現了以下錯誤:值錯誤不支持的格式字符「「」使用%字符串格式化時

ValueError: unsupported format character '"' (0x22) at index 36 

我明白,我我正在使用某個地方,但不知道它在哪裏。在「‘......「」」我不能在別處看到腳本中的任何’在模板中都應該內封裝」。

可能有人建議在那裏我已經錯了嗎?

import csv 
import sys 


def csvDict(csvRow): 
    dict = {'Name': csvRow[0], 'p1t': csvRow[1], 'p1l': csvRow[2], 'p2t': csvRow[3], 'p2l': csvRow[4], 
      'outputWidth': csvRow[5], 'sourceTop': csvRow[6], 'sourceLeft': csvRow[7], 'sourceWidth': csvRow[8], 
      'sourceHeight': csvRow[9]} 
    return dict 


# Get CSV File from the argument 
csvFile = csv.reader(open(sys.argv[1], 'rt')) 

# Convert CSV Into list for Processing 
csvList = list(csvFile) 

# Setup XML Variables Dictionary 
outputVars = csvDict(csvList[0]) 

# Confirm Dictionary contains the right data 
print outputVars 


# XML Format Template 
mapTemplate = """<map type="map2dpanel" name="%(Name)" width="%(outputWidth)" > 
     <point id="1" top="%(p1t)" left="%(p1l)" /><point id="2" top="%(p2t)" left="%(p2l)" /> 
     <source image="current source" top="%(sourceTop)" left="%(sourceLeft)" width="%(sourceWidth)" height="%(sourceHeight)" /> 
    </map> 
""" 

print mapTemplate % outputVars 
+0

在未來,請不要包括*全回溯*所以我們不必去猜測哪行拋出異常或Python如何設法到這一點。 –

+0

當然啊。會做。 – RichPorter

回答

2

你忘了指定佔位符類型的Python預計%(name)s%(name)dany of the other supported types

相反,Python中發現"成爲下一個字符,這不是一個有效的格式字符:。

name="%(Name)" 
#  -------^ 

由於您正在讀取CSV文件中的值,因此它們都是字符串;添加s字符到您的模板佔位符:

mapTemplate = """\ 
    <map type="map2dpanel" name="%(Name)s" width="%(outputWidth)s" > 
     <point id="1" top="%(p1t)s" left="%(p1l)s" /><point id="2" top="%(p2t)s" left="%(p2l)s" /> 
     <source image="current source" top="%(sourceTop)s" left="%(sourceLeft)s" width="%(sourceWidth)s" height="%(sourceHeight)s" /> 
    </map> 
""" 
+0

太好了。非常感謝您的快速回答。 – RichPorter