2011-11-04 25 views
9

ディレクトリに.csvファイルがたくさんありますが、最初に.csvファイルがリスト[0]に読み込まれるように、それぞれをPython内のループで開きたいと思います。 2番目の.csvはlist [1]に読み込まれます。.csvファイルをPythonリストに読み込む

残念ながら、私のコードはすべての.csvファイルをループしていますが、すべての.csvファイルをリスト[0]に入れます。上記の目標を達成できるようにコードを変更するにはどうすればよいですか?どうもありがとう。上部付近には、リストrowdataを更新する必要があり、ループの内側

def create_data_lists(): 
i=0 
for symbol in symbols: 
    with open(symbols[i]+'.csv', 'r') as f: 
     print i 
     reader = csv.reader(f) 
     reader.next() 
     for row in reader: 
      rowdata.append(row) 
    data_by_symbol.append(rowdata) 
    i=i+1 
+0

'for ... in'を使っているときにインデックスを使う必要がないので、' open(symbols [i] ...) 'を' open(symbol ...) 'に置き換えてgetすべての「私」を取り除く。 – tjm

答えて

11

ジョン

は、ここでは、コードです。さもなければあなたはそれを永遠に追加しています。私は本当に、なぜリストに読者自身を保存していないそれを

+0

rowdata = []を追加するとそのトリックが実行されました。ありがとう!しかし、インデックスを削除すると、次のエラーが表示されます。 "foo: としてcreate_data_lists open(symbols + '。csv'、rb ')の行35、TypeError:リスト(「str」ではなく)のみを連結できます" – johnjdc

+0

@ johnjdc:' symbol'と 'symbols'の違いに注意してください。 'for symbol in symbols:'を使うと、リストシンボルの各要素を1つずつ取得し、プログラムから 'i'を削除する必要はありません。一度あなたが式に慣れたら、コードを消去するだけです。 tjmが指摘したように、あなたのコードは私と他の人に重複して見えました。 – yosukesabai

+0

また、 'data_by_symbol'をlistの代わりにdict(あなたのコードのどこかで' date_by_symbol = {} ')にするのも意味があります。そのようにして、上記のコードの最後の行で 'data_by_symbol [symbol] = rowdate'と言うでしょう。それらを使用するときには、mysymbolのデータを取得するために[mysymbol]をdata_by_symbol、すべてのシンボルを繰り返し処理するためにsym_data_by_symbol.items()のdatを使用できます。もう一つの小さな特徴は、i = 0、i = 1などの意味を追跡することは楽しいことではありません。 – yosukesabai

6

を使用していないとして、iを処分したrowdata = []右 EDIT

def create_data_lists(): 

    for symbol in symbols: 
     with open(symbol+'.csv', 'r') as f: 
     print symbol 
     rowdata = [] 
     reader = csv.reader(f) 
     reader.next() 
     for row in reader: 
      rowdata.append(row) 
    data_by_symbol.append(rowdata) 

print i後のようなものがありますか?この方法の最大の利点は、あなたがして、フィルタ列のようなものを行うことができますtahtある

for row in list_of_csv_files[0]: 
    # do some processing on the row 

list_of_csv_files = [] 

for f in filenames: 
    list_of_csv_files.append(csv.DictReader(open(f))) 

これは、後で上のような何かをすることができ、リスト内のリーダー自体を格納します簡単に、のような使用方法:私は、CSVファイルを読み込み前(したがって、脱構造化)を格納するよりも、あなたのプログラムに、より役立つだろう疑う

one_row = [row["name of column heading"] for row in list_of_csv_files[0]] 
two_rows = [[row["name col 2"], row["name col 2"]] for row in list_of_csv_files[0]] 

。あなたが本当にすべてのCSVファイルを読み込むと、リストに保存されているを持っているしたい場合は

しかし、あなたは私はこれをお勧めしません、リストのリストが必要になります、それは集中的に非常にメモリを次のようになります。

list_of_csv_files = [[]] 

for f in filenames: 
    list_of_csv_files.append([row.values() for row in csv.DictReader(open(f))]) 
+0

私はより良い方法を学ぶことに熱心です - 私は独学で、間違いなく初心者です。私の意図は、私がPythonリストに読み込んだすべての.csvデータに対して数学演算を実行することです。あなたの投稿から、リストのリストを使って自分のコードが遅くなると思いますか?私が分析している.csvデータを簡単に区別できるようにするために、この方法を選択しました。私の目標に沿ってより良い提案があれば、私はすべて耳にします。ありがとう。 – johnjdc

+0

確かに、私はあなたにいくつかの異なるテクニックを教えるために私の答えを広げます。 – Serdalis

関連する問題