从url检索数据而不创建文件

时间:2018-03-13 11:47:30

标签: python python-3.x url python-requests

我遇到了一个小项目的问题,我试图从网站上下载大量数据来存储它们并在以后处理它们,但是我需要对它们做一些小改动才能让他们工作。

我目前正在使用urllib.request.urlretrieve(url, folder)下载数据,然后打开它,进行必要的更改并再次保存。

然而,感觉就像写入和读取操作是不必要的,因为我将数据保存在我的磁盘上只是为了再次打开它,特别是当我最终下载大量数据时。

我尝试使用我不太了解的请求模块,但由于数据最初被压缩为gzip文件,我遇到了麻烦。

download = requests.get("https://tickdata.fxcorporate.com/EURUSD/2015/1.csv.gz", stream=True) 
decoded_content = download.content.decode('gzip')

这不起作用,因为他既不会将gzgzip视为有效编码。 我认为gzip背后的数据是utf-8,但如果我尝试使用utf-8作为编码参数,它也不起作用。

有人会知道如何让它读取文件吗?

Ps:我不确定它对这个问题是否有用,但这是我在下载文件时对文件所做的操作:

pair = 'EUR_USD'

for year in range(2015,2016):
    for week in range(1,53):

        ref= 'E:\Finance_Data\\' + pair + '\Tick\\' + str(year) + '\\' + str(week) + '.csv.gz'
        dest = 'E:\Finance_Data\\' + pair + '\Tick\\' + str(year) + '\\' + str(week) + '_clean.csv'

        with gzip.open(ref, 'rb') as f:
            data = f.read()

        with gzip.open(dest, 'wb') as f:
            f.write(data.decode('utf-8').replace('\x00', '').encode('utf-8'))

1 个答案:

答案 0 :(得分:1)

与包io.BytesIO

一起使用

例如:

import requests
from io import BytesIO
import gzip

a = requests.get('https://tickdata.fxcorporate.com/EURUSD/2015/1.csv.gz', stream=True)
f = gzip.open(BytesIO(a.content), mode="rt")
print(f.read())
f.close()