首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从服务器链接下载压缩的csv文件并读入pandas

从服务器链接下载压缩的csv文件并读入pandas
EN

Stack Overflow用户
提问于 2021-02-09 04:23:40
回答 1查看 338关注 0票数 0

我一直在尝试使用requests库从服务器主机URL下载压缩的csv。

当我从同一服务器下载一个不需要压缩的小文件时,它在CSV中读取没有问题,但对于这个文件,我返回了编码错误。

我尝试了多种编码方式,以pandas csv格式读入,以zip文件格式读入,然后打开(此时我得到的错误消息是,文件不是zip文件)。

我还尝试了使用这里建议的zipfile库:Reading csv zipped files in python

并且还尝试在read_csv中设置编码和压缩。

适用于未压缩的服务器文件的代码如下:

代码语言:javascript
运行
复制
response = requests.get(url, auth=HTTPBasicAuth(un, pw), stream=True, verify = False)
dfs = pd.read_csv(response.raw)

但用于此文件时返回'utf-8' codec can't decode byte 0xfd in position 0: invalid start byte

我也尝试过:

代码语言:javascript
运行
复制
request = get(url, auth=HTTPBasicAuth(un, pw), stream=True, verify=False)
zip_file = ZipFile(BytesIO(request.content))
files = zip_file.namelist()
with gzip.open(files[0], 'rb') as csvfile:
    csvreader = csv.reader(csvfile)
    for row in csvreader:
        print(row)

这将返回查找属性错误。

EN

回答 1

Stack Overflow用户

发布于 2021-02-09 04:42:40

这里有一种方法:

代码语言:javascript
运行
复制
import pandas as pd
import requests
from requests.auth import HTTPBasicAuth
from zipfile import ZipFile
import io

# Example dataset
url = 'https://www.stats.govt.nz/assets/Uploads/Retail-trade-survey/Retail-trade-survey-September-2020-quarter/Download-data/retail-trade-survey-september-2020-quarter-csv.zip'

response = requests.get(url, auth=HTTPBasicAuth(un, pw), stream=True, verify=False)
with ZipFile(io.BytesIO(response.content)) as myzip:
    with myzip.open(myzip.namelist()[0]) as myfile:
        df = pd.read_csv(myfile)

print(df)

如果要读取多csv压缩文件中的特定csv,请将myzip.namelist()[0]替换为要读取的文件。如果您不知道其名称,可以使用print(ZipFile(io.BytesIO(response.content)))检查zip文件内容

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66108822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档