Python for循环只在循环csv文件时执行一次

时间:2013-04-27 01:38:18

标签: python loops

我是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

2 个答案:

答案 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>