压缩文件从 URL 到 Python (Pandas)
Zipped File from URL to Python (Pandas)
我想使用以下代码从 Gitlab 加载一个压缩文件到我的 Jupyter Notebook:
link='https://git. ... master/data.zip'
import urllib.request
urllib.request.urlretrieve(link, "data.zip")
import zipfile
compressed_file = zipfile.ZipFile('data.zip')
csv_file = compressed_file.open('data.csv')
df = pd.read_csv(csv_file)
我无法下载它,我需要从 URL!
获取数据
我在第 4 行遇到以下错误 (----> 4 compressed_file = zipfile.ZipFile('data.zip'))
BadZipFile: 文件不是 zip 文件
我的代码有什么错误?
您的代码示例不可重现。下面的代码显示了如何从 URL 下载 zip 文件并解压缩。它是 geojson,因此使用 json.loads()
,但对于 CSV 数据,这可以是 pd.read_csv()
。
这实际上是一个三步过程
- 将 URL 传递给
requests.get()
并将块下载到本地文件
- 检查此 zip 文件的内容以查找您要使用的文件
zfile.infolist()
- 打开文件句柄并使用它。对于你的情况 pd.read_csv()
所有独立于使用的标准请求和文件处理。
import requests
import pandas as pd
from pathlib import Path
from zipfile import ZipFile
import json, io
# source geojson for country boundaries
geosrc = pd.json_normalize(requests.get("https://pkgstore.datahub.io/core/geo-countries/7/datapackage.json").json()["resources"])
fn = Path(geosrc.loc[geosrc["name"].eq("geo-countries_zip"), "path"].values[0]).name
if not Path.cwd().joinpath(fn).exists():
r = requests.get(geosrc.loc[geosrc["name"].eq("geo-countries_zip"), "path"].values[0],stream=True,)
with open(fn, "wb") as fd:
for chunk in r.iter_content(chunk_size=128):
fd.write(chunk)
zfile = ZipFile(fn)
with zfile.open(zfile.infolist()[0]) as f:
geojson = json.load(f)
我想使用以下代码从 Gitlab 加载一个压缩文件到我的 Jupyter Notebook:
link='https://git. ... master/data.zip'
import urllib.request
urllib.request.urlretrieve(link, "data.zip")
import zipfile
compressed_file = zipfile.ZipFile('data.zip')
csv_file = compressed_file.open('data.csv')
df = pd.read_csv(csv_file)
我无法下载它,我需要从 URL!
获取数据我在第 4 行遇到以下错误 (----> 4 compressed_file = zipfile.ZipFile('data.zip'))
BadZipFile: 文件不是 zip 文件
我的代码有什么错误?
您的代码示例不可重现。下面的代码显示了如何从 URL 下载 zip 文件并解压缩。它是 geojson,因此使用 json.loads()
,但对于 CSV 数据,这可以是 pd.read_csv()
。
这实际上是一个三步过程
- 将 URL 传递给
requests.get()
并将块下载到本地文件 - 检查此 zip 文件的内容以查找您要使用的文件
zfile.infolist()
- 打开文件句柄并使用它。对于你的情况 pd.read_csv()
所有独立于使用的标准请求和文件处理。
import requests
import pandas as pd
from pathlib import Path
from zipfile import ZipFile
import json, io
# source geojson for country boundaries
geosrc = pd.json_normalize(requests.get("https://pkgstore.datahub.io/core/geo-countries/7/datapackage.json").json()["resources"])
fn = Path(geosrc.loc[geosrc["name"].eq("geo-countries_zip"), "path"].values[0]).name
if not Path.cwd().joinpath(fn).exists():
r = requests.get(geosrc.loc[geosrc["name"].eq("geo-countries_zip"), "path"].values[0],stream=True,)
with open(fn, "wb") as fd:
for chunk in r.iter_content(chunk_size=128):
fd.write(chunk)
zfile = ZipFile(fn)
with zfile.open(zfile.infolist()[0]) as f:
geojson = json.load(f)