簡體   English   中英

Python for循環在循環csv文件時僅執行一次

[英]Python for loop only executes once when looping csv file

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

使用open('input.csv', "U")打開文件。

“ U”告訴python使用通用換行符功能。 這允許python自動檢測正在使用哪種換行符。 問題在於不同的平台執行換行的方式不同。

您可能想弄清楚為什么會有奇怪的換行符。 您可以在此處輕松解決此問題,但可能會再次出現,並且稍后會很痛苦。

注意:在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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM