繁体   English   中英

使用来自 URL 的 pandas 读取包含多个不同数据类型文件的 zip 文件 [重复]

[英]Read zip file with multiple, different data type files inside using pandas from an URL [duplicate]

我正在尝试从URL读取一个大的 (~850 mb) .csv 文件。

问题是 .csv 文件位于一个 .zip 文件中,该文件还包含一个 .pdf 文件,所以当我尝试在 pandas 中读取它时:

df = pd.read_csv('link', encoding='latin1', sep=';')

它不起作用,因为它指出:

ValueError:在 ZIP 文件中找到多个文件。 每个 ZIP 只有一个文件:['LEIAME.pdf', 'perfil_eleitorado_2018.csv']

我正在使用协作笔记本,因此最好的解决方案是直接从链接打开 .zip 文件,或者将 .csv 文件上传到不需要权限、登录或类似内容的地方直接在笔记本中打开。

Obs:这只是我正在使用的大型 .csv 数据库之一,还有其他大小相似,甚至更大的数据库。

pd.read_csv()函数允许第一个参数是 .zip 文件路径或 URL,但每个 ZIP 文件只支持一个文件。 发布的 zip 文件有多个文件。

您可以遍历 zip 文件中的条目并将 CSV 数据作为缓冲对象读取。

import pandas as pd
import zipfile
from io import BytesIO

with zipfile.ZipFile("perfil_eleitorado_2018.zip", "r") as f:
    for name in f.namelist():
        if name.endswith('.csv'):
            with f.open(name) as zd:
                df = pd.read_csv(zd, encoding='latin1', sep=';')
            print(df)
            break

如果您想直接与 URL 交互而不先下载它,那么可以使用请求库。

import pandas as pd
import zipfile
from io import BytesIO
import requests

url = 'https://cdn.tse.jus.br/estatistica/sead/odsele/perfil_eleitorado/perfil_eleitorado_2018.zip'
r = requests.get(url)
buf1 = BytesIO(r.content)
with zipfile.ZipFile(buf1, "r") as f:
    for name in f.namelist():
        if name.endswith('.csv'):
            with f.open(name) as zd:
                df = pd.read_csv(zd, encoding='latin1', sep=';')
            print(df)
            break

输出:

    DT_GERACAO HH_GERACAO ANO_ELEICAO ... QT_ELEITORES_DEFICIENCIA QT_ELEITORES_INC_NM_SOCIAL
0   12/04/2021   13:55:01        2018 ...                        1                          0
1   12/04/2021   13:55:01        2018 ...                        2                          0
2   12/04/2021   13:55:01        2018 ...                        4                          0
3   12/04/2021   13:55:01        2018 ...                        2                          0
4   12/04/2021   13:55:01        2018 ...                       25                          0
..         ...        ...         ... ...                      ...                        ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM