我目前正在处理具有约100k-500k行(行包含文本且最大500mb)的csv文件。
由于我需要在每一行中处理文本数据,因此我的目标是打开每个文件,遍历各行,向每行添加两个新的变量,并将这些行写入一个新文件(每个初始csv文件得到一个新的输出文件)。
我的首要考虑是不先将所有行读入内存,然后将它们随后写入新文件,而是一步完成所有操作:
import glob
import csv
from datetime import datetime
all_initial_files = glob.glob('/path/to/my/files/*.csv')
for file in all_initial_files:
output_file = create_new_path(file)
with open(output_file, 'w') as w:
writer = csv.DictWriter(w, some_header)
writer.writeheader()
with open(output_file, 'a') as f_o:
writer = csv.writer(f_o)
with open(file, 'r') as f_i:
data = csv.reader(f_i)
for i,row in enumerate(data):
new_var1,new_var2 = process_row(row)
row = row.extend([new_var1,new_var2])
writer.writerow(row)
print(datetime.now().strftime('%d.%m.%Y, %H:%M:%S:'),f'{file}: Processed row #{i}.')
但是,我遇到了脚本变慢的情况,它在文件中处理的行越多(约30k行,您会注意到脚本处理单行所花费的时间更长)。
因此,我的问题是:python中读取csv文件,处理/添加信息并写入新csv文件的最佳/最快方法是什么?也许有一个涉及pandas
的解决方案工作更快?