Hi Stackoverflow Community,
我正試圖將ONLY澳大利亞的google移動性csv檔案從:https://www.gstatic.com/covid19/mobility/Region_Mobility_Report_CSVs.zip中匯入到Python中(該檔案可在以下網站找到)。https://www.google.com/covid19/mobility/) 。然而,谷歌現在提供了一個所有csv檔案的檔案夾。
我想知道是否有人能給我指出正確的方向,如何在網上匯入壓縮檔案夾內的檔案。
我想實作這一目標,而不需要將壓縮檔案夾下載到我的電腦中,然后再匯入美國的csv。我想知道是否有辦法通過代碼來完成這一切,所以每次我運行代碼時,python都會從URL中抓取最新的AUS csv檔案。
謝謝你
uj5u.com熱心網友回復:
看起來你想依次做3件事:
你想做什么?
- 下載zip檔案
- 閱讀壓縮檔案 。
- 讀取澳大利亞的csv檔案(假設你知道它的檔案名) 。
我們只需使用python的內置模塊就可以完成這一切!
首先,用urllib.request下載檔案:
import urllib.request
with urllib.request.urlopen("https://www.gstatic.com/covid19/mobility/Region_Mobility_Report_CSVs.zip"/span>) 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"/span>) 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()回傳一個位元組的blob。所以我們必須對這些位元組進行解碼,然后將其轉化為閱讀器所接受的東西。
結合上述所有的內容:
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"/span>) as f.
zip_data: bytes = f.read()
# 打開zip檔案并決議csv。
with zipfile.ZipFile(BytesIO(zip_data) ) as z:
with z.open("2020_AU_Region_Mobility_Report.csv"/span>) as au_csv:
australia_data = csv.reader(StringIO(au_csv.read().decode("utf8") )
for row in australia_data:
print( row)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/310243.html
標籤:
