如何加速此 python 脚本以读取和处理 csv 文件?



我正在尝试用python处理一个相对较大(约100k行(的csv文件。这是我的代码的样子:

#!/usr/bin/env python
import sys
reload(sys)
sys.setdefaultencoding("utf8")
import csv
import os
csvFileName = sys.argv[1]

with open(csvFileName, 'r') as inputFile:
parsedFile = csv.DictReader(inputFile, delimiter=',')
totalCount = 0
for row in parsedFile:
target = row['new']
source = row['old']
systemLine = "some_curl_command {source}, {target}".format(source = source, target = target)
os.system(systemLine)
totalCount += 1
print "nProcessed number: " + str(totalCount)

我不确定如何优化此脚本。我应该使用DictReader之外的东西吗?

我必须使用 Python 2.7,并且无法升级到 Python 3。

  1. 如果你想避免多处理,可以将你的长csv文件分成几个较小的csv并同时运行它们。喜欢

    $ python your_script.py 1.csv &
    $ python your_script.py 2.csv & 
    

& 符号代表 Linux 环境中的后台执行。更多细节在这里。我对Windows中类似的东西没有足够的了解,但是可以打开几个cmd窗口,哈哈。

无论如何,坚持使用多处理(ofc(要好得多。

  1. requests代替curl怎么样?

    import requests
    response = requests.get(source_url)
    html = response.content
    with open(target, "w") as file:
    file.write(html)
    

这是文档。

  1. 避免打印语句,从长远来看,它们会像地狱一样慢。对于开发和调试,这是可以的,但是当您决定开始脚本的最终执行时,您可以将其删除并直接在目标文件夹中检查已处理文件的计数。

正在运行

subprocess.Popen(systemLine)

而不是

os.system(systemLine)

应该加快速度。请注意,systemLine 必须是字符串列表,例如 ['some_curl_command', 'source', 'target'] 才能工作。如果要限制并发命令的数量,请查看一下。

最新更新