繁体   English   中英

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

[英]How can I speed up this python script to read and process a csv file?

我正在尝试在python中处理相对较大的(约10万行)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 envs中的后台执行。 此处有更多详细信息。 我对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']才能正常工作。 如果你想限制并发命令的数量看看那个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM