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
相关产品推荐
相关产品推荐

