如何在Google Colab中使用wget下载超大文件并转存到Google Drive
解决方案
你之前的操作出现磁盘占用远超文件大小的核心原因是:即使切换到了Drive的挂载目录,wget默认会先生成临时下载文件,完整下载完成后才重命名为目标文件,同时Colab的FUSE挂载层本身也会有本地缓存,所以实际占用的本地磁盘是文件大小的1.5~2倍,就是你44GB文件占了80GB空间的原因。下面是不需要占用Colab本地磁盘的实现方案:
方法1:调整wget参数+禁用挂载缓存(最简修改方案,无需大幅改动原有代码)
仅需要对原有代码做两处修改即可:
- 挂载Drive时禁用本地缓存,避免FUSE层额外占用磁盘,把原有挂载代码替换为:
from google.colab import drive drive.mount('/content/drive', force_remount=True, use_google_dot_drive=True) !echo "user_allow_other" >> /etc/fuse.conf !fusermount -u /content/drive !drive mount --allow_other --vfs-cache-mode off /content/drive
- 给wget添加
--no-cache和--no-temp-file参数,下载时直接写入目标文件,不生成临时文件,最后一行下载命令修改为:
!wget --load-cookies cookies.txt --content-disposition --no-cache --no-temp-file https://www.cityscapes-dataset.com/file-handling/?packageID=4
注意:该方案下载速度受Drive挂载IO限制,完全不占用Colab本地磁盘空间,只要你的Drive剩余容量大于340GB即可正常运行
方法2:用Python流式下载直接写入Drive(更稳定,完全不占本地磁盘)
如果修改wget参数还是出现磁盘占用过高的问题,可以换成Python requests库流式下载,每下载一段就直接写入Drive文件,全程不生成本地临时文件,完整代码如下:
from google.colab import drive drive.mount('/content/drive') import requests import os # 替换为实际的文件保存路径 save_path = '/content/drive/MyDrive/cityscape/target_file.zip' login_url = 'https://www.cityscapes-dataset.com/login/' download_url = 'https://www.cityscapes-dataset.com/file-handling/?packageID=4' # 登录获取cookies login_data = { 'username': 'MYUSERNAME', # 替换为你的账号 'password': 'MYPASSWORD', # 替换为你的密码 'submit': 'Login' } session = requests.Session() session.post(login_url, data=login_data) # 流式下载直接写入Drive with session.get(download_url, stream=True) as r: r.raise_for_status() with open(save_path, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk)
该方案的chunk大小可按需调整,全程只会占用极小内存,完全不会占用Colab本地磁盘空间
注意事项
- 提前确认你的Google Drive剩余存储空间大于340GB,避免下载到一半因Drive空间不足失败
- Colab免费版会话最长运行12小时、Pro版最长24小时,若下载速度低于10MB/s建议拆分文件分块下载,避免会话中断导致下载失败
- 下载过程中不要关闭Colab页面,保持网络连接正常
内容的提问来源于stack exchange,提问作者Hamidreza74
相关产品推荐
相关产品推荐

