非常新手尝试使用python。
我尝试实施类似此问题Splitting csv file based on a particular column using Python
中讨论的内容我的目标是获取一个包含1500万行的500个股票代码符号的文件,并将每个股票代码放入自己的文件中。
但是,当我运行它时,我得到了
OSError:[Errno 24]打开的文件太多:“ APH.csv”
所有数据行都是按顺序排列的(即股票代码“ A”的所有数据行都是一个接一个,所以我可以在继续下一个文件之前关闭文件)。我不确定在进入下一个代码之前,我将在此代码中关闭文件的位置。仅供参考-如果有问题,请在Mac上使用。
我的代码是
import csv
with open('WIKI_PRICES_big.csv') as fin:
csvin = csv.DictReader(fin)
# Category -> open file lookup
outputs = {}
for row in csvin:
cat = row['ticker']
# Open a new file and write the header
if cat not in outputs:
fout = open('{}.csv'.format(cat), 'w')
dw = csv.DictWriter(fout, fieldnames=csvin.fieldnames)
dw.writeheader()
outputs[cat] = fout, dw
# Always write the row
outputs[cat][1].writerow(row)
# Close all the files
for fout, _ in outputs.values():
fout.close()
答案 0 :(得分:0)
根据您描述的文件结构,应执行以下操作。
诀窍在于,如果报价值始终是按顺序排列的,则您只需要一次保持打开一个文件输出文件的状态。然后,您可以关闭旧的报价单,然后在遇到新的报价值时重新打开新的报价单。
import csv
fout = False
with open('WIKI_PRICES_big.csv') as fin:
csvin = csv.DictReader(fin)
seen = []
for row in csvin:
cat = row['ticker']
# Open a new file and write the header.
if cat not in seen:
seen.append(cat)
if fout: # Close old file if we have one.
fout.close()
fout = open('{}.csv'.format(cat), 'w')
dw = csv.DictWriter(fout, fieldnames=csvin.fieldnames)
dw.writeheader()
# Always write the row
dw.writerow(row)
fout.close()