python - 使用 Google Cloud Storage API 处理大文件

标签 python file append google-cloud-storage cloud-storage

我需要实现的是使用cloudstorage库将文件列表连接成一个文件。这需要在 MapReduce 分片内进行,该分片的内存上限为 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())

有办法解决这个问题吗?也许以 block 的形式打开或 append 文件?以及如何做到这一点?谢谢!

==编辑==

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

最佳答案

对于大文件,您需要将文件分成较小的文件,上传每个文件,然后将它们合并在一起,作为 composite objects 。您将需要使用compose() function从图书馆。好像有no docs on it yet .

上传所有部分后,类似以下内容应该可以工作。需要确保的一件事是要组成的路径文件不包含存储桶名称或开头的斜杠。

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为你。

关于python - 使用 Google Cloud Storage API 处理大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31623955/

相关文章:

python - Scrapy - 抓取多个项目

python - 从 IMDb 收集某些剧集的所有电影评论

c++如何根据我要处理的文件更改void *的大小

jquery 添加闭合标签

pointers - 使用值接收器 append 到具有足够容量的 slice

javascript - Jquery - 使用append()打印数组

Python mechanize 不点击按钮

html - 将 HTML 打包为 "browser file"

c++ - Xcode 4 文件输入/输出,命令行工具 C++

python - keras 只会给出 0.5001 的精度