我正在尝试遍历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)
答案 0 :(得分:3)
如果您使用的是CSV库(假设您使用的是Python 2.x),通常应该以二进制模式打开文件(请参阅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)
答案 1 :(得分: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
来加快查找速度。