【发布时间】:2017-10-22 16:56:57
【问题描述】:
我有相当大的 csv 文件,我需要逐行操作/修改(因为每一行可能需要不同的修改规则),然后将它们以正确的格式写入另一个 csv。
目前,我有:
import multiprocessing
def read(buffer):
pool = multiprocessing.Pool(4)
with open("/path/to/file.csv", 'r') as f:
while True:
lines = pool.map(format_data, f.readlines(buffer))
if not lines:
break
yield lines
def format_data(row):
row = row.split(',') # Because readlines() returns a string
# Do formatting via list comprehension
return row
def main():
buf = 65535
rows = read(buf)
with open("/path/to/new.csv",'w') as out:
writer = csv.writer(f, lineterminator='\n')
while rows:
try:
writer.writerows(next(rows))
except StopIteration:
break
即使我通过map 使用多处理并通过生成器防止内存过载,处理 40,000 行仍然需要 2 分钟以上。老实说,它不应该花那么多钱。我什至从生成器输出中生成了一个嵌套列表,并尝试将数据一次写入一个大文件,这是一种逐块的方法,但仍然需要很长时间。我在这里做错了什么?
【问题讨论】:
标签: python-3.x csv multiprocessing generator bigdata