背景:之前接到一个小需求,给了几百个csv文件的下载链接,需要将这些csv表格中的某一列数据拉去出来,进行一些简单计算。
刚开始的想法是全部用requests请求文件url直接下载保存,再挨个读取文件。但是这种办法太low且效率极低。于是想直接通过读取请求数据流,提取其中数据。然而python3以上的版本并不支持urllib2.urlopen()方法,所以试了几种方法,但是最终还是找到了,直接上马。
import requests
import csv
from contextlib import closing
# 文件地址
url = "http://snk-gm.hz.37.com.cn/downloads/rankshow/20191205/snk_Rugal_1006_44_1575532733_COST_MONEY_20191204050000.csv"
# 读取数据
with closing(requests.get(url, stream=True)) as r:
f = (line.decode('gbk') for line in r.iter_lines())
reader = csv.reader(f, delimiter=',', quotechar='"')
for row in reader:
print(row)
运行结果如下: