當我運行在Python IDLE殼牌以下:蟒環不會在第二次通過迭代
f = open(r"H:\Test\test.csv", "rb")
for line in f:
print line
#this works fine
然而
,當我運行在第二時間以下:
for line in f:
print line
#this does nothing
當我運行在Python IDLE殼牌以下:蟒環不會在第二次通過迭代
f = open(r"H:\Test\test.csv", "rb")
for line in f:
print line
#this works fine
然而
,當我運行在第二時間以下:
for line in f:
print line
#this does nothing
這不起作用,因爲你已經第一次搜索到文件的末尾。您需要倒帶(使用.seek(0)
)或重新打開文件。
其他一些指針:
csv
模塊。不要試圖自己實施CSV解析,除非這是一個教育練習。'rU'
模式下的文件,而不是'rb'
。 'rU'
是通用換行符模式,它將處理來自具有不同行結尾的平臺的源文件。with
,因爲即使在出現錯誤的情況下,它也會爲您清理手柄。例如:。
with open(r"H:\Test\test.csv", "rU") as f:
for line in f:
...
使用csv模塊讀取文件的好處。它也允許我使用列表索引,這是我需要的。 –
列表中是否有類似的重新設置功能?我遇到類似的情況,我在列表中打印這些項目並且它第一次工作,但是然後我輸入相同的代碼,並且它什麼都不打印。我必須刪除列表並重新創建它。我使用的是Python IDLE shell,如果這很重要 –
@ wannabe_n00b請在單獨的問題中詢問並顯示您的代碼。 – TkTech
因爲你已經走了所有的方式,通過CSV文件,迭代器被耗盡。您需要在第二次循環之前重新打開它。
使用seek(0)是另一種選擇,應該具有較少的開銷(不顯着)並避免讀/寫併發潛在問題。 –
你可以從變量中的文件中讀取數據,然後你可以迭代這個數據任何沒有。你想要在你的腳本中的時間。這比來回做seek
要好。
f = open(r"H:\Test\test.csv", "rb")
data = f.readlines()
for line in data:
print line
for line in data:
print line
輸出:
# This is test.csv
Line1,This is line 1, there are, some numbers here,321423423
Line2,This is line2 , there are some characters here,sdfdsfdsf
# This is test.csv
Line1,This is line 1, there are, some numbers here,321423423
Line2,This is line2 , there are some characters here,sdfdsfdsf
這取決於您加載的CSV。通常,當我們處理來自客戶的CSV文件時,它們的大小是多GB。與將其全部加載到內存中相比,「seek(0)」非常便宜。 – TkTech
[這可能有助於](http://docs.python.org/2/library/stdtypes.html#file.tell)。 – wim