如何在python中下载zip文件并从中解析csv文件
我写了一个脚本,点击一个URL,下载一个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
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)