2017-06-01 20 views
-2

csvファイル内のリストを反復処理して、最後の列に株式ティッカーシンボルが含まれている行を見つけて、特定のシンボルを見つけてその行を新しいcsvファイル。何が間違っているか分かりません。 csvファイルには、毎日の株価情報が含まれています。列文字列に基づいてcsvファイル内の行をフィルタリングする方法

def filter_csv(): 
    import csv 
    with open('SP_comb_with_header.csv','r') as fin: 
     with open ('SP_filtered.csv','w') as fout: 
      writer = csv.writer(fout)    
      for row in csv.reader(fin): 
       if fin['Ticker'] == "AAPL": 
        writer.writerow(row) 
+2

*「何が間違っているかわからない」*あなたはどうやってあなたに伝えると思いますか?あなたは現在、質問に答えることができません。質問を読むことがあります。 – SiHa

+0

あなたの質問は改善しないと閉じられてしまう危険性があります。入力したCSVファイルとコードを実行する際に表示されるトレースバックからいくつかの行を追加してください。 –

答えて

3

あなたは(これは、あなたは、Python 2.xのを使用していると仮定し)CSVライブラリを使用している場合には、通常、(usage exampleを参照)バイナリモードでファイルを開く必要があります。標準のリーダーは各行をリストとして与えるので、最後の列はrow[-1]になります。

import csv 

def filter_csv(): 
    with open('SP_comb_with_header.csv', 'rb') as f_input, open('SP_filtered.csv', 'wb') as f_output: 
     csv_input = csv.reader(f_input) 
     csv_output = csv.writer(f_output) 

     for row in csv_input: 
      if row[-1] == "AAPL": 
       csv_output.writerow(row) 
0

あなたはそれらのヘッダー名を使用して列にアクセスする場合は、あなたがcsv.DictReaderを必要とする:あなたは別のCSVファイルへcsv.DictReaderから行を書きたい場合は、あなたが使用できること

import csv 

def filter_csv(): 
    symbols = set(['AAPL', 'GOOGL']) 
    with open('SP_comb_with_header.csv') as csv_in: 
     reader = csv.DictReader(csv_in) 
     with open('SP_filtered.csv', 'w') as csv_out: 
      writer = csv.DictWriter(csv_out, reader.fieldnames) 
      for row in reader: 
       if row['Ticker'] in symbols: 
        writer.writerow(row) 

注意上記の通りcsv.DictWriter。このソリューションでは、より高速なルックアップのためにsetを使用しています。

関連する問題