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

Python实现Gzip压缩内容并上传至Cloud Storage时出现FileNotFoundError的解决方案问询

解决Cloud Storage Gzip压缩上传的问题

嘿,我来帮你搞定这个报错!你遇到的FileNotFoundError是因为代码里用gzip.open尝试在本地创建path/to/name.json.gz文件,但你的本地机器上可能没有path/to/这个目录,所以才会提示找不到路径。而且其实完全没必要先把压缩文件写到本地,直接在内存里完成压缩再上传到Cloud Storage才是更高效的做法,还能避免本地文件操作的各种问题。

下面是修正后的代码,我已经调整了压缩逻辑,去掉了本地文件的依赖:

import gzip
import io
from google.cloud import storage

def upload_to_cloud_storage(json_content):
    """将JSON内容Gzip压缩后上传到Cloud Storage."""
    # 初始化内存字节流,用来存储压缩后的内容
    compressed_content = io.BytesIO()
    
    # 在内存中完成Gzip压缩
    with gzip.GzipFile(fileobj=compressed_content, mode='wb') as f:
        f.write(json_content.encode("utf-8"))
    
    # 把字节流的指针移到开头,这样后续上传时能读取完整内容
    compressed_content.seek(0)

    storage_client = storage.Client()
    # 获取目标存储桶
    my_bucket = storage_client.bucket('my_bucket')
    # 创建Blob对象,指定云端的文件路径
    destination_blob = my_bucket.blob("path/to/name.json.gz")
    
    # 设置编码类型为gzip,让Cloud Storage能识别这是压缩文件
    destination_blob.content_encoding = 'gzip'
    # 从内存字节流上传文件,指定内容类型为JSON
    destination_blob.upload_from_file(
        compressed_content,
        content_type='application/json'
    )

关键改动说明:

  • 新增了io.BytesIO的使用:用内存字节流代替本地文件,避免了本地目录不存在的问题,也提升了上传效率。
  • 去掉了本地文件写入的步骤:不再需要在本地创建压缩文件,直接在内存中完成压缩后上传。
  • 使用upload_from_file方法:直接从内存字节流上传,比先写本地再上传更简洁。
  • 调整了参数命名:把原来的json参数改成json_content,避免和内置模块名冲突,代码更规范。

这样修改后,就能顺利把Gzip压缩后的JSON文件上传到Cloud Storage啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:12:31