2017-05-30 219 views
0

編輯:我認爲問題是在csv文件的主體中使用空行。我已經嘗試了一些修補程序,但無濟於事。它的令人沮喪,因爲這個代碼原本是工作的Id如果有人有任何想法,以便我可以與我的生活相處:)讚賞索引錯誤列表超出範圍

我有此代碼的工作。它會從csv文件輸入並將特定列輸出到文本文件。我試圖讓它只打印該行,如果row[32]包含文本。由於我開始搞亂它,它根本不工作。

它現在給我錯誤Index error: list out of range。 csv文件包含許多列和行,所以它絕對不會超出範圍。看着它,我看起來很蠢,以至於我再也看不到樹木了。我可能已經完全搞砸了,或者它可能只是一些小事。

import csv 
import os 

with open("raw.csv", "r") as f, open("txtfile.txt", "w") as output: 
    r = csv.reader(f) 
    for row in r: 
     output.write("{} --- {} --- {}\n".format(row[4], row[1], row[6])) 

with open("txtfile.txt", "w") as output: 
    output.write(str(r)+"\r\n") 
    print("Written successfully") 

with open("raw.csv", "r") as f, open("txtfile.txt", "w") as output: 
    r = csv.reader(f) 
    for row in r: 
     if "Active" in row[0] and "Text1"in row[1] or "Text2" in row[1] or "Burglary" in row[1]: 
      output.write("{} - {} - {}\n".format(row[4], row[6], row[1]) 
+0

當使用'行[]',裏面的值的'[]'是指列標題。所以'行[6]'在列6中打印每行的值,而不是在文件中的第6行的值。 –

+0

這就是我的想法,並且那部分在幾天前工作 – nodramas2011

回答

0

我最終解決了這個問題。這是做空行,所以我添加了「行和行[]」的話到if語句。這有忽略空行的影響,從而不會給我索引錯誤。加入「和行[32]確保它僅打印行,其中行[32]包含文本

with open("test.csv", "r") as f, open("cops.txt", "w") as output: 
    r = csv.reader(f) 
    for row in r: 
     if "Active" in row and row[0] and row[32]:  
      output.write("{} - {} - {}".format(row[4], row[1], row[6]) 
      + " {} \n \n".format(row[19]) + " {} \n \n".format(row[32]) + " 
      {}\n\n".format(row[13]) + "\n\n")