2011-12-28 12 views
0

だから私はこのコードを持っています。しかし、これは最初の反復でのみ正しく実行されます。第2の反復では、内側forループは開始されない。アイデアはなぜですか?Pythonのforループを通して最初の繰り返しでのみ実行されるコードの部分

補足情報:dはDictReaderオブジェクト、searchtermslistは文字列のリストです。ポイント1にプリントラインを書き込むと、それが予想されるたびにプリントされます。しかし、ポイント2の印刷行は、termindex = 0で印刷されますが、他の時間は印刷されません。あなたが何か他のものが必要な場合は教えてください。事前に

おかげで、 D

searchsums=[] 
for termindex, term in enumerate(searchtermslist): 
    #Point 1 
    searchnumbers=[] 
    for indiv_dict in d: 
     #point 2 
     val=indiv_dict[term] 
     result=str(val) 
     numbler=float(result) 
     searchnumbers.append(numbler) 
    if termindex==0: 
     searchsums=searchnumbers[:] 
    else: 
     map(sum,zip(searchsums,searchnumbers)) 
+2

'マップデータを生成しません(合計、ジッパー(searchsums、searchnumbers)) 'は怪しげに見えます - あなたはおそらくそれを何かに割り当てたいと思っています。つまり、 'searchtermslist'と' d'の定義や上記のプリントを含む*全体のサンプルプログラムを提供することはできませんか?そうすれば、どこに問題があるのか​​がわかりやすくなります。 – phihag

答えて

1

はあなたの最初のループ反復は、その後の反復のために利用できない、それを残して、dを消費します。それを使用しようとする前にリストまたはタプルに読み込みます。

+0

それはそれを修正しました。ありがとう! – user1118493

1

dcsv.DictReaderオブジェクトの場合、繰り返し処理すると、ファイルがなくなるまで(つまりファイルの終わり)、CSVファイルから行が読み込まれます。 2回目に反復しようとすると、ファイルがすでにファイルの終わりにあるため、結果は生成されません。

ファイルの先頭に戻る必要があります。たとえば、あなたがこのようdを作成した場合、:

>>> myfile = open('name_of_csv_file.csv', 'r') 
>>> d = csv.DictReader(myfile) 

を、あなたは、このようなファイルの先頭に戻ることができます。

>>> myfile.seek(0) 
0

あなたが直接書き込むことができます:

searchnumbers.append(float(str(indiv_dict[term]))) 

ものの何かにstrを適用してから適用する義務があるのは奇妙です。float

indiv_dict[term]はフロート自体ではありませんか?

私はあなたの問題は事実によるものであると考えているイテレータとしてD行為:それは1時間に読まれた後、それが使い果たされると、もう

+0

うん、それは問題のようだ。はい、indiv_dict [term]は浮動小数点にする必要がありますが、そのように扱う際にエラーが発生しました。それは巨大なプログラムではないので、私は働いていて質問をしないことに決めました;) – user1118493

関連する問題