<p><code>zip</code>格式没有任何简单的方法来删除或替换存档中的文件。也许有一些图书馆可以这样做,但我不知道有一个。在</p>
<p>但是等等:</p>
<blockquote>
<p>the zip(1) utitly can do this ( using the "-u" option) so why not python? </p>
</blockquote>
<p>首先,<code>-u</code>所做的只是告诉它“只有在时间戳不更新的情况下才替换现有文件”,这在这里并不真正相关。如果没有<code>-u</code>它仍然会,默认命令是<code>add</code>,它执行相同的操作而不检查时间戳:</p>
<blockquote>
<p>Update existing entries and add new files. If the archive does not exist create it. This is the default mode.</p>
</blockquote>
<p>但是,更重要的是,正如<a href="http://linux.die.net/man/1/zip" rel="noreferrer">the manpage you referenced</a>明确指出的那样:</p>
<blockquote>
<p>Zip files. When changing an existing zip archive, zip will write a temporary file with the new contents, and only replace the old one when the process of creating the new version has been completed without error.</p>
</blockquote>
<p>而这正是你想要做的:写一个完整的新文件到一个临时位置,然后用新文件替换原来的文件。在</p>
<p>如果你需要让它在Windows上运行,这可能会有点痛苦。(如果没有,只需使用<code>tempfile.NamedTemporaryFile</code>和<code>os.rename</code>)但您已经知道如何做:</p>
<blockquote>
<p>I know of the method to write a complete new file, but this would take much time if the content is big.</p>
</blockquote>
<p>不要超过<code>zip -u</code>花费太多时间。在</p>