2016-09-06 4 views
1

は、私のコードの一部(問題を上げている部分)である。このラインではスタック:エラーが出て動作することはできません - インデックスエラーのpythonここでは3.5

with open('list.txt') as csvfile: 
    readCSV = csv.reader(csvfile, delimiter = ",") 
    GTINs = [] 
    products = [] 
    prices = [] 
    for row in readCSV: 
     GTIN = int(row[0]) 
     product = row[1] 
     price = float(row[2]) 

     GTINs.append(GTIN) 
     products.append(product) 
     prices.append(price) 

GTIN = int(row[0]) 

"IndexError:リストのインデックスが範囲外です"というエラーが発生していますが、修正方法はわかりません。ここで私は(.txtファイル)を抽出しようとしている情報は、次のとおりです。

69696961,Milk,1.29 
55555555,Bread,0.49 
45632549,Milkshake,1.99 

私はプログラム(2行を奪った)への変更をしたときにエラーが発生しました。

私はよく、本当に立ち往生しているので、どんな助力も高く評価されます。

+7

あなたのCSVの行の1つが空です。 –

+0

多くのCSVライターは、最後の行が空であるが存在するファイルを書き出します(最後から2番目に改行文字が入ります)。つまり、@DanielRosemanによると、EOFに達しておらず、最後に空白行があることを意味します。 forループの下で、追加する前に 'if row.rstrip():'を追加することができます –

+0

そして、 'for'の先頭に '' not row:continue'を入れるのが速い修正です... –

答えて

0

list.txtファイルから空白行を削除してみます。

0

あなたのcsvに間違った行または黒い行があるようです。 try-except式でインデックスエラーを処理できます。あなたが列を抽出しようとしている場合

try: 
    GTIN = int(row[0]) 
    product = row[1] 
    price = float(row[2]) 

    GTINs.append(GTIN) 
    products.append(product) 
    prices.append(price) 
except IndexError: 
    # do something (like "pass" if you don't want that lines) 

しかし、あなたはitertools.zip_longest()

from itertools import zip_longest 
with open('list.txt') as csvfile: 
    readCSV = csv.reader(csvfile, delimiter = ",") 
    GTIN, product, price = zip_longest(*readCSV, fillvalue="") 

注意を使用することができます:あなたは何かの代わりに、逃した値に空の文字列を使用することができます。または、関数に渡さないと、デフォルト値のNoneが使用されます。

あなたが彼らの本当のタイプのアイテムを使用すると、ジェネレータ式を使用している、次のアプローチを使用することができますしたい場合、コメントで述べたように

from itertools import zip_longest 
with open('list.txt') as csvfile: 
    readCSV = csv.reader(csvfile, delimiter = ",") 
    rows = ((int(a), b, float(c)) for a, b, c in csv.reader(csvfile)) 
    GTIN, product, price = zip_longest(*rows, fillvalue="") 
+0

あなたは 'splat'そこに... –

+0

@NinjaPuppyそれは何ですか? – Kasramvd

+0

あなたの最後の行は 'izip(* readCSV、fillvalue = '')' –

0

は何私はここで見ることはtxtファイルないCSVです。ここでは簡単な解決策は以下のとおりです。

GTINs = [] 
products = [] 
prices = [] 
with open('stack.txt','r') as f: 
    for line in f: 
     sentence = line.split(',') 
     GTINs.append(sentence[0]) 
     products.append(sentence[1]) 
     prices.append(sentence[2]) 
print(GTINs) 
print(products) 
print(prices) 

出力は次のとおりです。 [ '69696961'、 '55555555'、 '45632549'] は、[ 'ミルク'、 'パン'、 'ミルクセーキ'] [ '1.29 \ n '、' 0.49 \ n '、' 1.99 ']

関連する問題