2017-05-30 139 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")