在Google Cloud Storage Python中解压缩一个大文件并将其分解成块



我在Google Cloud Storage中有一个大的压缩文件。它需要解压缩并分成更小的块上传到同一个bucket。我的内存限制是2GB,而文件比这个大,所以我不能一次解压缩所有文件。shutil。copyfileobj(fsrc, fdst[, length])似乎是一个内存高效的解决方案,但我不能使它特别适用于GCP(与blob)。

您可能需要为此编写一些自定义代码。

我会寻找一个库,可以在流压缩数据源和解析它,因为它的流。听起来你在使用Python,所以可能是类似于stream-unzip的东西(还没有尝试过,但听起来它可以解决你的问题)。

然后,对于每个文件,当您解压缩它们时,您需要将它们流式传输回云存储。有几种方法可以根据你使用的客户端库来编写GCS。

代码大致如下:

def read_chunks_from_gcs(bucket, object_name):
with your_gcs_library.read_file_like_object(bucket, object_name) as r:
yield from r.iter_bytes(chunk_size=65536)
for file_name, file_size, unzipped_chunks in stream_unzip(read_chunks_from_gcs('mybucket', 'big-zipfile.zip'):
stream = your_gcs_library.open_file_for_write(bucket, file_name, file_size)
for chunk in unzipped_chunks:
stream.write(chunk)

那可能有用。如果您为某些GCS库找到了精确的解决方案,我鼓励您将其作为答案发布。我想看看它是什么样子的。

相关内容

最新更新