2017-05-30 13 views
0

編集:問題は、csvファイルの本体にある空白行であると思います。 Iveはいくつかの修正を試みたが役に立たなかった。このコードは元々働いていたのでイライラしています。誰かが私の人生で乗り越えることができるようにアイデアを持っているならば、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]にはテキストが含まれている行だけが表示されます。

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") 
関連する問題