2016-06-26 14 views
3

タプルを約470000並べ替えるとエラーが発生します。 私はタプルValueError:タプル数が多すぎるとアンパックする値が多すぎます

fp = open(filename, 'Ur') 
for line in fp: 
    listOfCitiesTuples.append(tuple(line.strip().split(','))) 
fp.close() 

タプルのリストにcsvファイルからデータを読み込むには、番号に関連付けられているいくつかの都市名です。

[('Chiredzi', '4117'), ('Gaths', '4117'), ('Masvingo', '4117'), ('Chivhu', '4120'), ('Gweru', '4120'), ('Kwekwe', '4120'), ('Mvuma', '4120'), ('Redcliffe', '4120'), ('Shurugwi', '4120'), ('Zvishavane', '4120')] 

私はリストで一緒に同じ番号に関連付けられているすべての名前を収集し、その番号にマッピングして、達成するために以下の方法を使用して、この

{'1': ['Bombuflat', 'Garacharma', 'Port Blair', 'Rangat'], '113': ['Hydra', 'Kouba'], '294': ['Vienna', 'Wien'], '1327': ['Lambarene', 'Ndjole']} 

のようなものを、すべてのこれらの項目の辞書を形成しますそれ

for k, v in listOfCitiesTuples: dictOfCitiesTuples.setdefault(v, []).append(k) 

これはタプルの数が少ないために正常に動作します(私がこれまでに20,000テストしている)が、470000.

のような大きな数に動作していないようです

多数のタプルが問題になるか、ファイルが破損している可能性がありますか?ファイル内のデータが破損している場合は、例外のようなデータが破損していることを知るためにできることはありますか?

私はあなたのコードを見て、推測を取ることによって、このエラー

File "/../view.py", line 186, in getCities 
    for k, v in listOfCitiesTuples: dictOfCitiesTuples.setdefault(v, []).append(k) 
ValueError: too many values to unpack (expected 2) 
+0

このタプルをpandasデータフレームにインポートし、ファイル内の破損したデータがないかどうかを確認します。 – min2bro

+0

完全なエラーは何ですか? 1つまたは3つの値を2つに展開する可能性が高くなります。たぶん都市名にカンマがあるので、3つの値が得られます。 –

+0

@jasそれは完全なエラーではありません。どのコード行が実行されていますか? –

答えて

2

あなたが期待しているよりも、あなたは別の形式でいくつかのデータを持っています。

具体的には、2つ以上の値を持つタプルを作成する複数のカンマがある行があります。この場合、コンパイル時にエラーが発生します。

ファイルを反復処理しているときに、タプルの長さが正しいかどうかを確認できます。不正なデータが見つかった場合は、そのデータを書き留めて修正したり、無視したりすることができます。あなたの必要に応じて。

with open(filename, 'Ur') as infile: 
    for line_num, line in enumerate(infile): 
     vals = tuple(line.strip().split(',')) 
     if len(vals) == 2: 
      listOfCitiesTuples.append(vals) 
     else: 
      bad_data.append((line_num, line)) 
+0

問題は1行に2つのコンマ、すなわちPutignano ,, 1872がありました。トリックがラインを見つけてくれてありがとう – jas

0

を取得し、何が起こっかもしれないと、ファイルの最後の行はそれで何も余分な行可能性があります。したがってline.strip().split(',')はサイズ1のリストを返します。これはforループで爆発するサイズ1のタプルになります。以下のガードを追加します。あなたのタイトルValueError: too many values to unpackに基づいて

fp = open(filename, 'Ur') 
for line in fp: 
    if len(line.strip()) > 0: 
    listOfCitiesTuples.append(tuple(line.strip().split(','))) 
fp.close() 
+0

あなたは推測する代わりに質問をすることができます。彼らの質問を明確にすることは、OPまでです。 –

+0

@ pgreen2の問題は、データの破損によるものです。 1行で問題が発生していた – jas

関連する問題