使用Google云存储API处理大文件

2024-04-29 02:19:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要实现的是使用cloudstorage库将一个文件列表连接到一个文件中。这需要在mapreduce shard中进行,它的内存上限为512MB,但连接的文件可能大于512MB。在

当文件大小达到内存限制时,以下代码段将中断。在

list_of_files = [...]
with cloudstorage.open(filename...) as file_handler:
    for a in list_of_files:
        with cloudstorage.open(a) as f:
            file_handler.write(f.read())

有没有办法绕过这个问题?也许打开或附加文件块?怎么做呢?谢谢!在

==编辑==

经过更多的测试,内存限制似乎只适用于f.read(),而写入大文件就可以了。分块读取文件解决了我的问题,但我非常喜欢@ianlewis指出的compose()函数。谢谢!在


Tags: 文件of内存列表readaswithfiles
1条回答
网友
1楼 · 发布于 2024-04-29 02:19:35

{将每个文件合并到一个较小的文件中,然后将它们合并到一个较小的文件中。您将希望使用库中的^{} function。好像有no docs on it yet。在

在你上传了所有的部分之后,下面的一些东西应该可以工作了。有一件事要确保,要组合的路径文件不包含bucket名称或开头的斜杠。在

stat = cloudstorage.compose(
    [
        "path/to/part1",
        "path/to/part2",
        "path/to/part3",
        # ...
    ],
    "/my_bucket/path/to/output"
)

如果可能,您可能还希望使用gsutil工具进行签出。它可以为你做automatic splitting, uploading in parallel, and compositing of large files。在

相关问题 更多 >