2017-06-01 150 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

通常應該以二進制模式打開文件(見usage example)如果您使用的是CSV庫(假設你正在使用Python 2.x的)。標準讀者會給你每行作爲一個列表,所以最後一列將是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

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.DictReader行到另一個CSV文件,你可以使用csv.DictWriter,如上所示。該解決方案使用set進行更快查找。