Python GCS如何在内部zip文件中重命名文件?

时间:2015-02-09 02:09:50

标签: python google-app-engine google-cloud-storage

假设我在Python AppEngine项目上有一个托管在GCS上的文件。不幸的是,这个文件结构类似于:

outer.zip/
  - inner.zip/
    - vid_file
    - png_file

问题是inner.zip内的两个文件在文件上没有.mp4扩展名,并且会导致各种麻烦。如何重命名文件,使其显示如下:

outer.zip/
  - inner.zip/
    - vid_file.mp4
    - png_file.png

以便inner.zip中的文件有扩展程序吗?

我一直遇到各种各样的限制,因为gcs不允许文件重命名,取消归档等等。

文件不是很大。

P.S。我对Python不是很熟悉,所以任何代码示例都会非常感谢,谢谢!

3 个答案:

答案 0 :(得分:2)

绝对没有方式对GCS对象执行任何更改 - 完全停止。它们正是你在出生时决定的一堆字节(由GCS本身解释),因此它们将保留。

您可以做的最好的事情是创建一个 new 对象,它几乎就像原始对象一样,除了它修复了在创建原始文件时所做的小错误和oopses。然后你可以用新的改进版本覆盖(即完全替换)原件。

希望这是你一次性犯下的一次性错误,现在想要解决,所以不值得为此编写程序。只需下载该GCS对象,使用普通工具解压缩并解压缩它可能包含的任何其他zip文件,使用您喜欢的本地文件系统工具对文件系统进行修复,再次压缩,上传/重写最终的zip到您想要的新GCS对象 - p,你已经完成了。

答案 1 :(得分:2)

Alex是正确的,对象是不可变的,即没有就地编辑。完成您所谈论的内容的唯一方法是下载当前文件,解压缩,更新新文件,将文件重新压缩到同名文件中,然后上传到GCS。 GCS对象覆盖是事务性的,因此旧内容将在上载完成之前可见。这样做显然不是很有网络效率,但至少在对象不可见时会留下一段时间(如删除和重新上传)。

答案 2 :(得分:0)

"导入zipfile"并且您可以在将文件下载到gcs存储中后将其解压缩。 我有一个代码在每晚从一个cron工作完成这个。 我从未尝试过用GAE创建一个zip文件,但文档说你可以做到。 https://docs.python.org/2/library/zipfile.html