手头的任务 - 将CSV文件转换为管道分离文件,并在每行中存在的数据中进行一些其他修改。
我一次从一个大文件(~5 GB)读取数据。对数据执行必要的修改,然后最终将数据写入输出文件。
我从原始代码开始,并根据人们的建议开始对其进行优化:
开始使用文件对象作为迭代器,如此处所示 Read large text files in Python, line by line without loading it in to memory
按照此处的建议开始批量编写数据 Speed up writing to files
我的代码现在看起来像这样:
import time
outFile = open('outfile.csv', 'w')
bunchsize = 1000000
bunch = []
with open("filename.csv", 'r', 567772160) as infile:
for line in infile:
try:
#PERFORMING THE MODIFICATIONS IN INPUT LINE HERE
temp = result
#Generating the output line
out = ''.join(temp) + '\n'
#Writing into outfile
bunch.append(out)
if len(bunch) == bunchsize:
outFile.writelines(bunch)
bunch = []
except:
continue
outFile.writelines(bunch)
infile.close()
outFile.close()
我假设这个代码可以通过使用单独的线程进行文件编写来进行异步写入,而另一个线程在输入行上进行修改来进一步优化。
我想知道如何在此代码中实现线程。 我已经浏览了很多关于线程的例子,但找不到任何与我想要做的事情相关的事情。
编辑:我认为在执行代码时可能会有所帮助,我的cpu利用率和磁盘使用率都是< 10%,完成5 GB文件的执行需要大约20分钟。