You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Google Cloud Bucket加载数据时下载空文件的技术问询

问题分析与解决方案

你遇到的核心问题是使用了错误的下载URL——你当前用的http://console.cloud.google.com/storage/browser/actions是Google Cloud Storage的控制台浏览页面,不是直接指向actions.zip文件的下载链接。所以你下载到的73.7KB文件其实是这个控制台页面的HTML源码,而非实际的数据集压缩包。

原代码的关键问题点

你的代码里的URL是控制台页面,不是文件的直接访问地址:

action_dataset_folder_path = 'action-data-set' 
zip_path = 'actions.zip' 
url='http://console.cloud.google.com/storage/browser/actions'  # 这里是控制台URL,不是文件下载URL

class LoadProgress(tqdm):
    last_block = 0
    def hook(self, block_num=1, block_size=1, total_size=None):
        self.total = total_size
        self.update((block_num - self.last_block) * block_size)
        self.last_block = block_num

if not isfile(zip_path):
    with LoadProgress(unit='B', unit_scale=True, miniters=1, desc='actions-Dataset') as pbar:
        urlretrieve( url, zip_path, pbar.hook)

if not isdir(action_dataset_folder_path):
    with tarfile.open(zip_path) as tar:
        tar.extractall()
        tar.close()
print('All done ...!')

解决方法

方法1:使用公开对象的直接下载URL(如果文件是公开可读的)

如果你的actions.zip存储在名为actions的GCS Bucket中,且文件设置为公开可读,那么正确的下载URL应该是:

url = "https://storage.googleapis.com/actions/actions.zip"

替换原代码中的URL即可正常下载文件。

方法2:使用Google Cloud Storage官方Python客户端库(推荐,支持私有文件)

urlretrieve只适合简单的公开URL下载,对于GCS的文件,更可靠的方式是使用官方的google-cloud-storage库,它支持身份验证、私有文件访问,还能更好地处理下载进度:

  1. 先安装依赖:
pip install google-cloud-storage tqdm
  1. 修正后的代码:
from google.cloud import storage
from tqdm import tqdm
import os
import tarfile

action_dataset_folder_path = 'action-data-set' 
zip_path = 'actions.zip' 
bucket_name = "actions"  # 你的GCS Bucket名称
blob_name = "actions.zip"  # Bucket中的文件路径

# 初始化GCS客户端(本地开发需设置GOOGLE_APPLICATION_CREDENTIALS环境变量)
storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

# 带进度条的下载
if not os.path.isfile(zip_path):
    file_size = blob.size
    with tqdm(total=file_size, unit='B', unit_scale=True, desc='actions-Dataset') as pbar:
        def progress_callback(bytes_downloaded):
            pbar.update(bytes_downloaded)
        blob.download_to_filename(zip_path, progress_callback=progress_callback)

# 解压文件
if not os.path.isdir(action_dataset_folder_path):
    with tarfile.open(zip_path) as tar:
        tar.extractall()
print('All done ...!')

补充说明

  • 如果你不确定文件的直接下载URL,可以在GCS控制台中找到对应的文件,点击右上角的「更多操作」→「获取链接」,选择「公开链接」(如果文件公开)或者生成「签名URL」(私有文件,有有效期)。
  • 官方客户端库还能处理权限验证、断点续传等复杂场景,比urlretrieve更适合生产环境使用。

内容的提问来源于stack exchange,提问作者LearnToGrow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:13:34