新闻中心
从Google Drive下载并解压ZIP文件至Colab Notebook

本教程详细介绍了如何在Google Colab环境中,无需挂载Google Drive,从公共Google Drive链接下载并解压ZIP文件。文章分析了常见的`BadZipFile`错误原因,提供了使用`requests`库构建正确下载URL的方法,并重点推荐了更便捷、鲁棒的`gdown`库,以确保文件能够被正确识别和处理,从而实现可复现的数据集下载流程。
在数据科学和机器学习项目中,经常需要从外部源下载数据集。Google Drive因其便捷的共享功能,常被用作数据集的托管平台。然而,在Google Colaboratory (Colab) Notebook中直接从公共Google Drive链接下载并解压ZIP文件时,开发者可能会遇到一些挑战,特别是当不希望挂载个人Google Drive以保持环境的可复现性时。本文将深入探讨如何高效、正确地在Colab中完成这一任务。
一、理解Google Drive文件下载机制与常见问题
直接从Google Drive的共享链接(例如https://drive.google.com/drive/folders/... 或 https://drive.google.com/file/d/...)尝试下载文件,往往不会直接得到文件本身,而是会收到一个HTML页面。这是因为Google Drive在提供文件下载前,通常会经过一个中间页面,用于显示文件信息、病毒扫描警告(针对大文件)或权限验证。
当使用requests库或wget命令尝试下载这类链接时,如果接收到的内容是HTML而不是实际的ZIP文件二进制数据,那么尝试使用zipfile模块解压时就会抛出BadZipFile: File is not a zip file的错误。
诊断方法:检查Content-Type头部
在尝试解压前,检查HTTP响应的Content-Type头部是诊断此类问题的关键。如果Content-Type显示为text/html而不是application/zip,则说明下载到的并非ZIP文件。
import requests
file_id = '1fdFu5NGXe4rTLYKD5wOqk9dl-eJOefXo' # 替换为你的Google Drive文件ID
download_url = f'https://drive.google.com/uc?export=download&id={file_id}'
response = requests.get(download_url)
print(f"Content-Type: {response.headers.get('Content-Type')}")如果输出显示Content-Type: text/html,则需要调整下载策略。
二、使用requests库下载并解压ZIP文件
要从Google Drive直接下载文件,需要构造一个特定的下载URL,通常格式为 https://drive.google.com/uc?export=download&id=FILE_ID。其中,FILE_ID是Google Drive文件中唯一的标识符,可以从文件的共享链接中提取(例如,https://drive.google.com/file/d/FILE_ID/view)。
步骤:
android 内核编译
图文教程 chm版
android内核编译手册(图文并茂) chm,Google Android操作系统内核编译图文教程。 搭建交叉编译环境(安装Android SDK: 将android-sdk_m5-rc14_linux-x86.zip解压缩到适当路径下即可使用。本文将其释放至/usr/local/android_sdk_linux路径下,并将其tools路径添加到PATH中),获取内核编译配置文件(从android sdk 中的模拟器中得到。启动android模拟器,再通过adb得到模拟器中提供的内核配置文件),在
0
查看详情
- 获取文件ID: 从Google Drive文件的共享链接中提取FILE_ID。
- 构造下载URL: 使用https://drive.google.com/uc?export=download&id=FILE_ID格式。
- 发送HTTP请求: 使用requests.get()获取文件内容。
- 处理大文件下载: 对于超过一定大小的文件,Google Drive可能会显示病毒扫描警告。这会导致首次请求返回一个包含“Download anyway”按钮的HTML页面。为了绕过此页面,通常需要跟随重定向或在请求中加入特定的cookie。
- 解压ZIP文件: 将下载的二进制内容传递给zipfile模块进行解压。
以下是一个完整的示例代码:
import requests
import io
import zipfile
import os
# 替换为你的Google Drive文件ID
file_id = '1fdFu5NGXe4rTLYKD5wOqk9dl-eJOefXo' # 示例ID,请替换为实际ZIP文件的ID
download_url = f'https://drive.google.com/uc?export=download&id={file_id}'
# 目标保存路径
output_path = '/content/downloaded_zip.zip'
extraction_dir = '/content/extracted_data/'
print(f"尝试从 {download_url} 下载文件...")
# 处理Google Drive大文件下载时的病毒扫描警告
# Google Drive对于大文件可能会返回一个警告页面,需要模拟点击“下载”
def download_file_from_google_drive(id, destination):
URL = "https://drive.google.com/uc?export=download"
session = requests.Session()
response = session.get(URL, params = { 'id' : id }, stream = True)
token = get_confirm_token(response)
if token:
params = { 'id' : id, 'confirm' : token }
response = session.get(URL, params = params, stream = True)
s*e_response_content(response, destination)
def get_confirm_token(response):
for key, value in response.cookies.items():
if key.startswith('download_warning'):
return value
return None
def s*e_response_content(response, destination):
CHUNK_SIZE = 32768
with open(destination, "wb") as f:
for chunk in response.iter_content(CHUNK_SIZE):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
# 执行下载
try:
download_file_from_google_drive(file_id, output_path)
print(f"文件已下载到: {output_path}")
# 检查下载的文件是否是有效的ZIP文件
if not os.path.exists(output_path) or os.path.getsize(output_path) == 0:
print("错误:下载的文件为空或不存在。请检查文件ID和权限。")
else:
# 解压ZIP文件
os.makedirs(extraction_dir, exist_ok=True)
with zipfile.ZipFile(output_path, 'r') as zip_ref:
zip_ref.extractall(extraction_dir)
print(f"ZIP文件已成功解压到: {extraction_dir}")
except Exception as e:
print(f"下载或解压过程中发生错误: {e}")
print("请确认文件ID是否正确,以及文件是否设置为公开访问。")注意事项:
- file_id必须是正确的Google Drive文件ID。
- 上述download_file_from_google_drive函数包含了处理Google Drive病毒扫描警告的逻辑,对于大文件下载尤为重要。
- 请确保目标ZIP文件已设置为“任何人都可以查看”或具有适当的共享权限。
三、推荐方案:利用gdown库简化流程
gdown是一个专门用于从Google Drive下载文件的Python库,它封装了处理Google Drive下载链接、病毒扫描警告等复杂逻辑,使得下载过程更加简洁和鲁棒。对于在Colab中进行数据下载,gdown是高度推荐的工具。
步骤:
- 安装gdown: 在Colab Notebook中运行pip install gdown。
- 使用gdown下载: 直接调用gdown.download()函数,传入文件ID和目标路径。
- 解压ZIP文件: 使用zipfile模块解压下载的文件。
# 1. 安装 gdown 库
!pip install gdown -q
import gdown
import zipfile
import os
# 替换为你的Google Drive文件ID
file_id = '1fdFu5NGXe4rTLYKD5wOqk9dl-eJOefXo' # 示例ID,请替换为实际ZIP文件的ID
output_path = '/content/downloaded_zip.zip'
extraction_dir = '/content/extracted_data/'
print(f"使用 gdown 从 Google Drive 下载文件 ID: {file_id}")
try:
# 2. 使用 gdown 下载文件
# quiet=False 会显示下载进度
gdown.download(id=file_id, output=output_path, quiet=False)
print(f"文件已下载到: {output_path}")
# 检查下载的文件是否是有效的ZIP文件
if not os.path.exists(output_path) or os.path.getsize(output_path) == 0:
print("错误:下载的文件为空或不存在。请检查文件ID和权限。")
else:
# 3. 解压ZIP文件
os.makedirs(extraction_dir, exist_ok=True)
with zipfile.ZipFile(output_path, 'r') as zip_ref:
zip_ref.extractall(extraction_dir)
print(f"ZIP文件已成功解压到: {extraction_dir}")
except Exception as e:
print(f"下载或解压过程中发生错误: {e}")
print("请确认文件ID是否正确,以及文件是否设置为公开访问。")
# 验证解压内容 (可选)
# print("\n解压后的文件列表:")
# for root, dirs, files in os.walk(extraction_dir):
# for name in files:
# print(os.path.join(root, name))gdown库的优点在于它能够自动处理Google Drive的各种下载重定向和警告,使得代码更加简洁和健壮。
四、注意事项与常见问题
- 文件ID的准确性: 确保使用的file_id是目标ZIP文件的正确ID。错误的ID会导致下载失败或下载到错误的文件。
- 文件公开权限: 目标Google Drive文件必须设置为“任何人都可以查看”或具有适当的共享权限,否则即使有了正确的下载URL,也无法访问。
- 验证下载内容: 在解压之前,始终建议检查下载文件的大小或Content-Type,以确保确实下载到了ZIP文件而不是HTML页面或其他错误响应。
-
wget命令: 虽然本文主要推荐Python库,但如果偏好命令行工具,wget也可以用于下载。同样需要使用正确的下载URL,并可能需要额外的参数来处理重定向和证书问题,例如:
!wget --no-check-certificate -O '/content/file.zip' 'https://drive.google.com/uc?export=download&id=YOUR_FILE_ID'
但wget在处理Google Drive的大文件病毒扫描警告时可能不如gdown灵活。
五、总结
在Google Colab中从公共Google Drive下载并解压ZIP文件,关键在于理解Google Drive的下载机制,并构造正确的下载URL。对于大多数场景,推荐使用gdown库,它提供了一种简洁而强大的解决方案,能够自动处理Google Drive下载的复杂性。如果需要更精细的控制,requests库配合正确的逻辑也可以实现。无论选择哪种方法,始终要确保文件ID的正确性以及文件的公共可访问性,以保证数据下载流程的顺畅和可复现。
以上就是从Google Drive下载并解压ZIP文件至Colab Notebook的详细内容,更多请关注其它相关文章!
# 重定向
# 百度营销推广ppt图片
# 如何做网络营销推广预算
# seo顾问培训推广排名
# 产品营销软文推广方面
# 修文网络推广营销案例
# 优化seo网站西安
# 饰品的营销推广
# 开远外文网站推广
# 阳泉数字化营销推广方案
# SEO初级证书考什么
# 配置文件
# 数据包
# 请确认
# 转换为
# python
# 而不是
# 是一个
# 设置为
# 病毒扫描
# 大文件
# stream
# 解压
# keep-alive
# session
# 工具
# app
# cookie
# go
# html
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明
谷歌google账号怎么注册账号 谷歌账号注册官方流程
支付宝如何设置安全保护_支付宝安全设置的全面教程
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
夸克浏览器网页版最新地址 夸克浏览器官方入口合集
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决
Promise错误处理:在catch后终止链式then执行的策略
J*aScript动态修改指定div内所有a标签样式指南
在J*aScript中复现SciPy的B样条拟合与求值:关键考量
解决macOS Tkinter应用双击启动崩溃:PyInstaller打包指南
AO3官网镜像链接 Archive of Our Own同人文在线浏览
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
韩小圈电脑版在线入口_网页版免费登录地址
Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析
Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
J*a实现学校排课程序_面向对象结构化项目示例
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
快速CSGO开箱网站指南 CSGO开箱平台推荐
免费抖音短视频入口_抖音网页版短视频免费通道
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
Python大型XML文件高效流式解析教程
百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案
12306几点到几点不能订票? | 官方最新系统维护时间全解析
steam官方网页快速访问 steam账号注册全流程
深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射
c++ 命名空间怎么用 c++ namespace使用指南
windows10怎么查看本机ip_windows10命令提示符ipconfig使用
AO3中文官网链接_AO3网页版稳定镜像站
微博网页版首页入口 微博电脑端官网登录链接
微信网页版官方入口直达 微信网页版网页版登录使用方法
学习通在线学习平台 学习通网页版直接进入课程中心
虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
深入理解Google Cloud Datastore查询:祖先路径与数据一致性
使用 Pandas 高效处理 .dat 文件:数据清洗与数值计算实战
TikTok国际版官网直达_TikTok国际版官网直达进入在线观看
想当下一个《2077》?《心之眼》Steam评价升至"多半好评"
深入理解Go语言中的指针类型:以*string为例
如何使用Go和Martini动态服务解码后的图片
优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践
QQ官网正版登录链接 QQ在线登录入口最新
Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程
Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践
C++ vector二维数组定义_C++ vector of vector用法
Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】


2025-11-26
浏览次数:次
返回列表