使用Python下载Google Play Console报告并保存到本地或StringIO缓冲区
解决方案
你之前调用objects().get()默认返回的是存储对象的元数据,加上alt='media'参数后即可获取实际的文件二进制内容,再结合返回元数据里的gzip压缩格式、utf-16le编码做对应处理即可,两种常见场景的实现代码如下:
前置依赖导入
你现有的依赖不用修改,额外导入以下系统内置模块即可:
import gzip from io import StringIO
场景1:保存CSV到本地存储
cloud_storage_bucket = 'pubsite_prod_rev_XXXXXXXXXXXXXXXX' report_to_download = 'reviews/reviews_id.co.sample.sample_202012.csv' json_file = "你的服务账号密钥文件路径.json" credentials = Credentials.from_service_account_file(json_file) storage = build('storage', 'v1', credentials=credentials) # 增加alt='media'参数获取文件二进制内容 file_binary = storage.objects().get( bucket=cloud_storage_bucket, object=report_to_download, alt='media' ).execute() # 解压gzip格式的内容 decompressed_binary = gzip.decompress(file_binary) # 写入本地文件 with open("google_play_reviews.csv", "wb") as f: f.write(decompressed_binary)
场景2:写入StringIO缓冲区(无需存本地,直接供后续处理)
# 接上面获取到decompressed_binary的步骤 # 二进制内容按utf-16le编码转成字符串 csv_content = decompressed_binary.decode("utf-16le") # 写入StringIO缓冲区 csv_buffer = StringIO(csv_content) # 后续可直接读取缓冲区内容做处理,比如用pandas加载: # import pandas as pd # df = pd.read_csv(csv_buffer)
注意事项
如果你后续需要处理其他类型的Google Play Console报告,只需要对应调整report_to_download的路径即可,无需修改下载逻辑。
内容的提问来源于stack exchange,提问作者victorxu2
相关产品推荐
相关产品推荐

