Python GCS 如何重命名内部 zip 文件中的文件?
Python GCS how to rename file within inner zip file?
假设我在 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 不是很熟悉,所以任何代码示例将不胜感激,谢谢!
绝对没有 方法可以对 GCS 对象执行 任何 更改 -- 句号。它们正是您在其诞生时决定的字节串(GCS 本身未解释),因此它们将保留。
您能做的最好的事情就是创建一个 new 对象,它几乎与原始对象一样,只是它修复了您在创建原始对象时所做的一些小错误和错误。然后你可以用新的、改进的版本覆盖(即完全替换)原来的版本。
希望这是一个一次性的可怕错误,您只犯过一次,现在想改正,因此不值得为此编写程序。只需下载该 GCS 对象,使用普通工具解压缩它并解压缩它可能包含的任何其他 zip 文件,使用您最喜欢的本地文件系统工具对文件系统进行修复,再次压缩,upload/rewrite 最终压缩到您想要的新的 GCS 对象 -- 哇,大功告成。
Alex 说得对,对象是不可变的,即不能就地编辑。完成你所说的唯一方法是下载当前文件,解压缩,更新新文件,将文件重新压缩到同名文件中,然后上传到 GCS。 GCS 对象覆盖是事务性的,因此在上传完成之前,旧内容将一直可见。这样做显然不是很有效的网络,但至少它不会留下对象不可见的时间段(就像删除和重新上传一样)。
"Import zipfile" 文件下载到 gcs 存储后,您可以解压缩文件。
我有代码每晚从 cron 作业中执行此操作。
我从未尝试过使用 GAE 创建 zip 文件,但文档说你可以做到。
https://docs.python.org/2/library/zipfile.html
假设我在 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 不是很熟悉,所以任何代码示例将不胜感激,谢谢!
绝对没有 方法可以对 GCS 对象执行 任何 更改 -- 句号。它们正是您在其诞生时决定的字节串(GCS 本身未解释),因此它们将保留。
您能做的最好的事情就是创建一个 new 对象,它几乎与原始对象一样,只是它修复了您在创建原始对象时所做的一些小错误和错误。然后你可以用新的、改进的版本覆盖(即完全替换)原来的版本。
希望这是一个一次性的可怕错误,您只犯过一次,现在想改正,因此不值得为此编写程序。只需下载该 GCS 对象,使用普通工具解压缩它并解压缩它可能包含的任何其他 zip 文件,使用您最喜欢的本地文件系统工具对文件系统进行修复,再次压缩,upload/rewrite 最终压缩到您想要的新的 GCS 对象 -- 哇,大功告成。
Alex 说得对,对象是不可变的,即不能就地编辑。完成你所说的唯一方法是下载当前文件,解压缩,更新新文件,将文件重新压缩到同名文件中,然后上传到 GCS。 GCS 对象覆盖是事务性的,因此在上传完成之前,旧内容将一直可见。这样做显然不是很有效的网络,但至少它不会留下对象不可见的时间段(就像删除和重新上传一样)。
"Import zipfile" 文件下载到 gcs 存储后,您可以解压缩文件。 我有代码每晚从 cron 作业中执行此操作。 我从未尝试过使用 GAE 创建 zip 文件,但文档说你可以做到。 https://docs.python.org/2/library/zipfile.html