2010-05-19 71 views
19

我試圖檢查提取的數據對我已有的csv的值。它只會循環一次CSV的行,我只能檢查feed.items()的一個值。我需要重置某個地方的價值嗎?有沒有更好/更有效的方法來做到這一點?謝謝。重複讀取Python中的CSV?

orig = csv.reader(open("googlel.csv", "rb"), delimiter = ';') 
goodrows = [] 
for feed in gotfeeds:  
    for link,comments in feed.items(): 
     for row in orig: 
      print link 
      if link in row[1]: 
       row.append(comments) 
       goodrows.append(row) 

回答

27

您可以通過重新設置文件對象的讀取位置「重置」 CSV迭代器。

data = open("googlel.csv", "rb") 
orig = csv.reader(data, delimiter = ';') 
goodrows = [] 
for feed in gotfeeds:  
    for link,comments in feed.items(): 
     data.seek(0) 
     for row in orig: 
      print link 
      if link in row[1]: 
       row.append(comments) 
       goodrows.append(row) 
+0

很好,謝謝。我的文件在不久的將來很小,但我不願意追查爲什麼它在幾個月內很慢。 – matt 2010-05-20 00:27:30

7

製作orig列表避免了需要重置/重新分析CSV:

orig = list(csv.reader(open("googlel.csv", "rb"), delimiter = ';')) 
+4

這將在技術上有效,但會導致整個CSV文件被加載到內存中。如果文件很小,這不是一個大問題,但這不會擴展。 – Cerin 2010-05-19 19:00:37

+0

@Chris。真正。如果csv文件很大,我希望他在這個問題中提到,但是我們的解釋確實存在空間。 – unutbu 2010-05-19 19:16:33

+0

我同意克里斯S.我們面臨同樣的問題..最終我們的CSV文件達到5GB一塊。毋庸置疑,這是一場噩夢 – dassouki 2010-05-19 19:54:40