簡體   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