我有这段代码,它从csv的顶行读取一个字段 并将其写入新列
然后保存csv,忽略不再需要的第一行和第三行。
问题是我要处理50,000多个csv。 是否可以将其并行以便它运行得更快? 我需要这样做几次,这有点太慢了。
import glob
import csv
import os
path = '/in/'
out = '/out/'
for fname in glob.glob(path):
with open(fname) as csv_open:
print j
raw_name = os.path.basename(fname)
outname = os.path.join(out, raw_name)
reader = csv.reader(csv_open)
all_t = []
row0 = reader.next()
train = row0[0]
row1 = reader.next()
row1.append('Loco')
all_t.append(row1)
reader.next()
for i, row in enumerate(reader):
row.append(train)
all_t.append(row)
with open(outname, 'w') as csv_out:
write_func = csv.writer(csv_out, lineterminator='\n')
write_func.writerows(all_t)
答案 0 :(得分:0)
您绝对可以生成多个线程/进程来并行运行该任务。看看(注意我假设您使用Python 2作为print j
语句):
但请注意,Python的threading
可能not behave as you would expect。所以也许multiprocessing
就是你要找的东西:创建一些进程并使用multiprocessing.Queue
传递它们的文件名(让进程保持活动状态并传递多个文件名,而不是创建一个新进程每个新文件)。
此外,您的瓶颈可能在于系统的I / O吞吐量(意味着最慢的部分可能是读取和写入这些CSV)。在这种情况下,并行化实际上并没有多大帮助。
您还可以尝试优化代码(或者使用其他模块甚至可能加速处理的编程语言)。但我认为这不是最值得花时间的步骤。
我会首先进行多处理,直到添加更多进程并不能提高性能(如果瓶颈是系统的I / O吞吐量,那么可能会比以后更早发生)。然后我或许会尝试优化处理代码。然后,如果它仍然很慢,我会耐心等待脚本完成执行,同时继续我的工作。