我是python的新手,并且遇到了一个小脚本问题。
目前定义的for循环只运行一次。
这是代码(每行有8个元素):
#!/usr/local/bin/python
def string_to_xml(string):
entries = string.split(',')
result = "<item>\n"
result += "\t<distributor>" + entries[0] + "</distributor>\n"
result += "\t<number>" + entries[1] + "</number>\n"
result += "\t<description>" + entries[2] + "</description>\n"
result += "\t<brand>" + entries[3] + "</brand>\n"
result += "\t<casesize>" + entries[4] + "</casesize>\n"
result += "\t<unitsize>" + entries[5] + "</unitsize>\n"
result += "\t<caseprice>" + entries[6] + "</caseprice>\n"
result += "\t<unitprice>" + entries[7] + "</unitprice>\n"
result += "</item>"
return result
with open("input.csv") as csvfile:
for line in csvfile:
print string_to_xml(line)
像这样,它只打印一次调用string_to_xml的结果。如果我将for循环中的语句更改为:
for line in csvfile:
print line
它正确打印文件的每一行。
为什么调用我的函数string_to_xml会导致循环只运行一次?
编辑:如果这有帮助,这是我的csv文件的前两行:
BIRITE,130405,Steak Sauce,Kraft,24,5oz,43.96,1.83
BIRITE,441045,Anchovy Filet,Maria,12,13oz,51.83,4.32
答案 0 :(得分:3)
使用open('input.csv', "U")
打开文件。
“U”告诉python使用通用换行符功能。这允许python自动检测正在使用哪种换行符。问题是不同的平台以不同的方式进行换行。
你可能想知道为什么你有奇怪的换行符。你可以在这里轻松地解决这个问题,但它可能会回来并且以后会很痛苦。
答案 1 :(得分:1)
注意:在Linux机器上完成
由于此代码似乎适用于其他人,因此我们创建一个CSV,然后再次运行相同的代码,这将澄清它是否是编码问题。
a=open('test.csv','wb')
a.write("BIRITE,130405,Steak Sauce,Kraft,24,5oz,43.96,1.83\n"+
"BIRITE,441045,Anchovy Filet,Maria,12,13oz,51.83,4.32\n")
a.close()
def string_to_xml(string):
entries = string.split(',')
result = "<item>\n"
result += "\t<distributor>" + entries[0] + "</distributor>\n"
result += "\t<number>" + entries[1] + "</number>\n"
result += "\t<description>" + entries[2] + "</description>\n"
result += "\t<brand>" + entries[3] + "</brand>\n"
result += "\t<casesize>" + entries[4] + "</casesize>\n"
result += "\t<unitsize>" + entries[5] + "</unitsize>\n"
result += "\t<caseprice>" + entries[6] + "</caseprice>\n"
result += "\t<unitprice>" + entries[7] + "</unitprice>\n"
result += "</item>"
return result
with open("test.csv") as csvfile:
for line in csvfile:
print string_to_xml(line)
输出的输出是:
<item>
<distributor>BIRITE</distributor>
<number>130405</number>
<description>Steak Sauce</description>
<brand>Kraft</brand>
<casesize>24</casesize>
<unitsize>5oz</unitsize>
<caseprice>43.96</caseprice>
<unitprice>1.83</unitprice>
</item>
<item>
<distributor>BIRITE</distributor>
<number>441045</number>
<description>Anchovy Filet</description>
<brand>Maria</brand>
<casesize>12</casesize>
<unitsize>13oz</unitsize>
<caseprice>51.83</caseprice>
<unitprice>4.32</unitprice>
</item>