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

Python GCS如何重命名内部zip文件中的文件?,python,google-app-engine,google-cloud-storage,Python,Google App Engine,Google Cloud Storage,假设我有一个文件托管在PythonAppEngine项目的GCS上。不幸的是,此文件结构类似于: outer.zip/ - inner.zip/ - vid_file - png_file 问题是internal.zip中的两个文件没有.mp4扩展名,这导致了各种各样的问题。如何重命名文件,使其看起来像: outer.zip/ - inner.zip/ - vid_file.mp4 - png_file.png 这样inner.zip中的文件就有了扩展

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

outer.zip/
  - inner.zip/
    - vid_file
    - png_file
问题是
internal.zip
中的两个文件没有
.mp4
扩展名,这导致了各种各样的问题。如何重命名文件,使其看起来像:

outer.zip/
  - inner.zip/
    - vid_file.mp4
    - png_file.png
这样
inner.zip
中的文件就有了扩展名

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

这些文件不是很大


另外,我对Python不是很熟悉,所以任何代码示例都将不胜感激,谢谢

绝对没有办法对地面军事系统对象进行任何改动——句号。它们正是您在它们诞生时决定的一组字节(GCS本身并不奇怪),因此它们将保持不变

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


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

绝对没有方法对地面军事系统对象执行任何更改--句号。它们正是您在它们诞生时决定的一组字节(GCS本身并不奇怪),因此它们将保持不变

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


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

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

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

导入zipfile,一旦文件下载到gcs存储中,您就可以解压缩文件。 我有一些代码每晚都从cron工作中完成这项工作。 我从来没有尝试过用GAE创建zip文件,但文档说你可以做到。

导入zipfile,下载到gcs存储中后,您可以解压缩该文件。 我有一些代码每晚都从cron工作中完成这项工作。 我从来没有尝试过用GAE创建zip文件,但文档说你可以做到。

->但这正是问题所在。原始内容仅通过zip文件提供。虽然我当然可以使用gsutil在本地服务器上执行cron操作,以重新创建具有适当扩展名的文件,但这不会是即时的。此外,我不介意创建单独的zip文件(原始文件的副本,但具有正确的文件扩展名),然后删除原始zip文件。然而,我似乎找不到从zip输出流创建zipfile并不断向其中添加文件的方法不知道“通过zip文件进入”是什么意思——是否有一台服务器重复且始终错误地创建此GCS对象?然后向我们展示服务器代码,如果您可以修复它,我们将展示如何修复;显然,修复错误严重的服务器是唯一正确的方法。如果不是,如果不是编程问题,那么就不是堆栈溢出问题。如果损坏的zipfile像你的Q仍然暗示的那样是一次性工作,那么我的建议适用:下载gcs对象,等等,等等,我已经回答过了。@DavidT。你又一次失去了我:在你的Q里有什么关于“不断添加文件”的吗?!请仔细阅读你的Q,并对其进行编辑,以便它为那些试图帮助你的穷人提供所有信息(100%,而不是99.9%!-)——请不要尽可能地努力帮助你,这似乎是你正在成功尝试的!例如,“我有一个文件”与“不断添加文件”相差很多,因为你现在突然发现了——你的文本中完全神秘的潜在含义一直在攻击我。请修复Q!!!可以我最终在服务器端修复了它。谢谢你的帮助。->这就是问题所在。原始内容仅通过zip文件提供。当然,我可以在本地服务器上使用gsutil执行cron任务,以重新创建具有适当扩展名的文件