嗨,Stackoverflow社区,
我试图只将澳大利亚的google文件从:CSVs.zip (可在:https://www.google.com/covid19/mobility/上获得)导入Python中。然而,google现在提供了一个包含所有csv文件的文件夹。
我想知道是否有人能为我指出一个正确的方向如何导入一个文件在一个压缩文件夹在线。
我想实现这‘不下载’的压缩文件夹到我的电脑,然后导入AUS csv。想知道是否有一种方法可以使用代码来完成所有这些操作,所以每次我运行代码时,python都会从URL获取最新的AUS文件。
谢谢
发布于 2021-09-13 06:05:44
看上去你想按顺序做三件事:
我们可以使用python的内置模块来完成所有这些工作!
首先,用urllib.request下载文件
import urllib.request
with urllib.request.urlopen("https://www.gstatic.com/covid19/mobility/Region_Mobility_Report_CSVs.zip") as f:
zip_data: bytes = f.read()第二,阅读档案。zipfile可以帮你解决这个问题。
import zipfile
from io import BytesIO
z = zipfile.ZipFile(BytesIO(zip_data))在这个步骤中,我们将zip_data (字节)包装在BytesIO (一个类似文件的对象)中,因为zipfile.ZipFile采用文件(字符串)、类文件对象或类路径对象的路径。
最后,使用csv模块对csv文件进行解析。
from io import StringIO
with z.open("2020_AU_Region_Mobility_Report.csv") as au_csv:
australia_data = csv.reader(StringIO(au_csv.read().decode("utf8")))
for row in australia_data:
print(row)我们解析csv的行有点复杂,因为csv.reader需要一个字符串迭代器,但是au_csv.read()返回一个字节。因此,我们必须对这些字节进行解码,然后将其转化为读者接受的内容。
将上述所有内容结合起来:
import csv
import urllib.request
import zipfile
from io import BytesIO, StringIO
# Download
with urllib.request.urlopen("https://www.gstatic.com/covid19/mobility/Region_Mobility_Report_CSVs.zip") as f:
zip_data: bytes = f.read()
# Open zip file and parse csv
with zipfile.ZipFile(BytesIO(zip_data)) as z:
with z.open("2020_AU_Region_Mobility_Report.csv") as au_csv:
australia_data = csv.reader(StringIO(au_csv.read().decode("utf8")))
for row in australia_data:
print(row)https://stackoverflow.com/questions/69157799
复制相似问题