如何在python中下载zip文件并从中解析csv文件

如何在python中下载zip文件并从中解析csv文件,python,python-3.x,Python,Python 3.x,我写了一个脚本,点击一个URL,下载一个zip文件,然后解压。现在我在解析解压后得到的CSV文件时遇到了问题 import csv from requests import get from io import BytesIO from zipfile import ZipFile request = get('https://example.com/some_file.zip') zip_file = ZipFile(BytesIO(request.content)) files = zip

我写了一个脚本,点击一个URL,下载一个zip文件,然后解压。现在我在解析解压后得到的CSV文件时遇到了问题

import csv
from requests import get
from io import BytesIO
from zipfile import ZipFile

request = get('https://example.com/some_file.zip')
zip_file = ZipFile(BytesIO(request.content))
files = zip_file.namelist()
with open(files[0], 'r') as csvfile:
    csvreader = csv.reader(csvfile)
    for row in csvreader:
        print(row)

看起来您尚未导入
csv
模块。尝试将
import csv
放在导入的顶部。

当您执行
files=zip_file.namelist()
时,只需在zip存档中列出文件的名称;这些文件尚未从zip中提取,您无法像现在这样将它们作为本地文件打开

您可以使用从zip文件直接读取数据流

因此,这应该是可行的:

zip_file = ZipFile(BytesIO(request.content))
files = zip_file.namelist()
with zip_file.open(files[0], 'r') as csvfile:
    csvreader = csv.reader(csvfile)
    ...

什么是错误/问题?我忘了在这里提到,但这不是问题所在,但问题是它没有打印任何东西,但文件不是空的。你是对的,这是问题所在,但现在它抛出了这个问题
\u csv.error:迭代器应该返回字符串,而不是字节(你是在文本模式下打开文件的吗?)
您能帮我解决上述错误吗?这样我就可以接受答案。您可以将字节强制为字符串,但您可能需要指定编码。类似的东西可能会起作用:
csvreader=csv.reader(str(csvfile,“utf-8-sig”)
response = requests.get(url)
with io.BytesIO(response.content) as zip_file:
    with zipfile.ZipFile() as zip_file:
        # Get first file in the archive
        for zip_info in zip_file.infolist():
            logger.debug(zip_info)
            # Open file
            with zip_file.open(zip_info) as file:
                # Load CSV file, decode binary to text
                with io.TextIOWrapper(file) as text:
                    return csv.DictReader(text)