【发布时间】:2013-04-27 01:38:17
【问题描述】:
我是 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
【问题讨论】:
-
我并没有使用它来实际创建有效代码,只是可以将 sn-ps 放入更大的文件中,因此我不必手动执行。在这种情况下很难解释,但目前不需要 xml 解析器。
-
是的 IDK 为什么我在这里更改了它,但在我的代码中我使用了“打开方式”。并将方法更改为仅“返回字符串”使其行为正常..我不明白为什么。我将编辑我的问题以包含所有内容。
-
好的,在
for line in csvfile:后面加上print len(line.split(',')), repr(line[-5:])。也许(正如我之前暗示的那样)行尾不是您认为的那样,因此它将整个内容放在一行中。 -
正如@DSM 所暗示的,这可能是文件编码问题。你能显示
head -2 input.csv | xxd的输出吗? -
尝试用
open("input.csv","U")替换你的公开电话