如何用Python脚本读写并更新Google Cloud中JSON文件的字段
解决Google Cloud存储中JSON文件的读取与更新问题
Python内置的open()函数只能访问本地文件系统,不支持Google Cloud Storage(GCS)的gs://协议,这就是你遇到FileNotFoundError的原因。要操作GCS中的文件,需要使用Google官方提供的google-cloud-storage库,以下是具体实现步骤:
1. 安装依赖库
先安装GCS的Python SDK:
pip install google-cloud-storage
2. 配置认证
- 本地开发环境:下载服务账号密钥文件(JSON格式),设置环境变量指向该文件:
或者在代码中直接指定密钥路径:export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"client = storage.Client.from_service_account_json("/path/to/key.json") - GCP托管环境(如Cloud Function、GCE):无需额外配置,默认会使用实例关联的服务账号权限。
3. 读取并更新JSON文件的代码示例
方式一:内存中直接处理(适合小文件)
import json from google.cloud import storage # 初始化存储客户端与目标文件 client = storage.Client() bucket = client.get_bucket("bucket-name") json_blob = bucket.blob("path/to/your/file.json") # 读取JSON内容到内存 json_content = json_blob.download_as_text() data = json.loads(json_content) # 修改目标字段 data["target_field"] = "new_value" data["another_field"] = 12345 # 将修改后的数据上传回GCS,覆盖原文件 updated_json = json.dumps(data, indent=2) json_blob.upload_from_string(updated_json, content_type="application/json")
方式二:使用临时文件(适合大文件)
如果JSON文件较大,内存处理压力大,可以用临时文件中转:
import json import tempfile import os from google.cloud import storage client = storage.Client() bucket = client.get_bucket("bucket-name") json_blob = bucket.blob("path/to/large-file.json") # 创建临时文件 with tempfile.NamedTemporaryFile(mode='r+', delete=False) as temp_f: # 下载GCS文件到临时文件 json_blob.download_to_file(temp_f) temp_f.seek(0) # 回到文件起始位置 data = json.load(temp_f) # 修改字段 data["large_file_field"] = "updated_content" # 清空临时文件并写入新内容 temp_f.seek(0) temp_f.truncate() json.dump(data, temp_f, indent=2) # 上传临时文件到GCS json_blob.upload_from_filename(temp_f.name) # 删除本地临时文件 os.unlink(temp_f.name)
注意事项
- 确保使用的服务账号拥有GCS存储桶的
storage.objects.get(读取权限)和storage.objects.update(写入权限) - 若存在多进程并发修改同一文件的场景,建议启用GCS的版本控制,避免数据覆盖
- 大文件操作优先选择临时文件方式,减少内存占用
内容的提问来源于stack exchange,提问作者Chithal
相关产品推荐
相关产品推荐

