【问题标题】:Retrieve data from url without creating a file从 url 检索数据而不创建文件
【发布时间】:2018-03-13 11:47:29
【问题描述】:

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

我目前正在使用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'))

【问题讨论】:

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


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多