Google 云函数 - Python - 将存储桶中的文件解压缩到同一个存储桶
Google cloud function - Python - unzip a file that is in a bucket to the same bucket
我正在尝试通过 Python (3.7) 中的 google 云函数将已经在 google 存储桶中的文件解压缩到同一个桶。解压缩必须在存储桶中完成:否 download/upload.
首先有一个模块可以列出存储桶中的文件:
rd_client = storage.Client()
bu_rd_bucket = rd_client.get_bucket(current_bucket)
blobs = bu_rd_bucket.list_blobs()
for blob in blobs:
我尝试了两种方法:
1- 使用压缩文件库:
if len(re.findall('xxxxx(.*).zip', str(blob.name)))>0:
with zipfile.ZipFile('gcs://{}/{}'.format(current_bucket, blob.name), 'r') as zip_ref:
zip_ref.extractall('gcs://' + current_bucket)***
使用此脚本我收到一条错误消息:FileNotFoundError:[Errno 2] 没有这样的文件或目录:'gcs://xxxxxxxxxxxxxxx.zip'(我使用绝对或相对文件路径得到相同的结果)
2- 使用 shutil 库:
if len(re.findall('xxxxx(.*).zip', str(blob.name)))>0:
shutil.unpack_archive(blob.name, current_bucket)
使用此脚本我收到一条错误消息:shutil.ReadError:xxxxxxxxxxxxxxxxxxxxxxx.zip 不是 zip 文件
我已经在我的本地机器上尝试了这两个脚本并且运行良好。
我没有发现与 google 有关这个具体问题的太多相关信息。
有什么想法吗?
the unzip has to be done in the bucket : no download/upload.
你的要求是不可能的。 Cloud Storage 不提供解压缩对象所需的计算处理功能。
我正在尝试通过 Python (3.7) 中的 google 云函数将已经在 google 存储桶中的文件解压缩到同一个桶。解压缩必须在存储桶中完成:否 download/upload.
首先有一个模块可以列出存储桶中的文件:
rd_client = storage.Client()
bu_rd_bucket = rd_client.get_bucket(current_bucket)
blobs = bu_rd_bucket.list_blobs()
for blob in blobs:
我尝试了两种方法:
1- 使用压缩文件库:
if len(re.findall('xxxxx(.*).zip', str(blob.name)))>0:
with zipfile.ZipFile('gcs://{}/{}'.format(current_bucket, blob.name), 'r') as zip_ref:
zip_ref.extractall('gcs://' + current_bucket)***
使用此脚本我收到一条错误消息:FileNotFoundError:[Errno 2] 没有这样的文件或目录:'gcs://xxxxxxxxxxxxxxx.zip'(我使用绝对或相对文件路径得到相同的结果)
2- 使用 shutil 库:
if len(re.findall('xxxxx(.*).zip', str(blob.name)))>0:
shutil.unpack_archive(blob.name, current_bucket)
使用此脚本我收到一条错误消息:shutil.ReadError:xxxxxxxxxxxxxxxxxxxxxxx.zip 不是 zip 文件
我已经在我的本地机器上尝试了这两个脚本并且运行良好。
我没有发现与 google 有关这个具体问题的太多相关信息。
有什么想法吗?
the unzip has to be done in the bucket : no download/upload.
你的要求是不可能的。 Cloud Storage 不提供解压缩对象所需的计算处理功能。