2017-06-01 149 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进行更快查找。