Ingesting/importing 特定国家/地区 Google 移动 CSV 文件到 Python

Ingesting/importing a country specific Google Mobility CSV file into Python

嗨,Whosebug 社区,

我正在尝试仅将澳大利亚的 google mobility csv 文件导入 Python 来自:https://www.gstatic.com/covid19/mobility/Region_Mobility_Report_CSVs.zip (which is available at: https://www.google.com/covid19/mobility/).. 但是,google 现在提供了一个包含所有 csv 的文件夹文件。

我想知道是否有人可以指导我如何在线导入压缩文件夹中的文件的正确方向。

我想实现这个 'without downloading' 将 zip 文件夹放入我的 PC,然后导入 AUS csv。想知道是否有一种方法可以使用代码来完成所有这些工作,所以每次我 运行 代码时,python 从 URL.

中获取最新的 AUS csv 文件

谢谢

看起来您正在尝试按顺序做 3 件事:

  1. 下载 zip 文件
  2. 阅读 zip 文件
  3. 阅读澳大利亚的 csv(假设您知道其文件名)

我们只需使用 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 需要 "a path to a file (a string), a file-like object or a path-like object"

最后,用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() returns 一个字节。所以我们必须解码这些字节,然后把它变成reader接受的东西。

结合以上所有内容:

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)