我正在尝试在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。
答案 0 :(得分:0)
如果要避免多处理,可以将长csv文件拆分为几个较小的csv并同时运行它们。喜欢
$ python your_script.py 1.csv &
$ python your_script.py 2.csv &
Ampersand代表linux envs中的后台执行。 More details here.我对Windows中的任何类似内容都没有足够的了解,但是可以打开几个cmd窗口,哈哈。
无论如何,坚持使用multiprocessing,ofc。
会更好如何使用requests
代替curl?
import requests
response = requests.get(source_url)
html = response.content
with open(target, "w") as file:
file.write(html)
答案 1 :(得分:0)
运行
subprocess.Popen(systemLine)
而不是
os.system(systemLine)
应该加快速度。请注意,systemLine必须是一个字符串列表,例如['some_curl_command','source','target']才能工作。如果要限制并发命令的数量,请查看that。