如何使用 Python 修改 ZIP 文件内的文件
Python 提供 zipfile 模块来读写 ZIP 文件。我们之前的文章 Python 示例:列出 ZIP 归档中的文件 和 使用 Python 在内存中下载和读取 ZIP 文件 展示了如何列出和读取 ZIP 文件内的文件。
在此示例中,我们将展示如何将文件从一个 ZIP 文件复制到另一个并在过程中修改其中一个文件。如果你想使用 ODT 或 LBX 等 ZIP 文件格式作为模板,替换文件的部分文本内容,这通常很有用。
modify_zip.py
import zipfile
with zipfile.ZipFile(srcfile) as inzip, zipfile.ZipFile(dstfile, "w") as outzip:
# 迭代输入文件
for inzipinfo in inzip.infolist():
# 读取输入文件
with inzip.open(inzipinfo) as infile:
if inzipinfo.filename == "test.txt":
content = infile.read()
# 通过替换字符串修改文件内容
content = content.replace("abc", "123")
# 写入内容
outzip.writestr(inzipinfo.filename, content)
else: # 其他文件,不想修改 => 直接复制使用以下命令打开输入文件和输出 ZIP 后
modify_zip.py
with zipfile.ZipFile(srcfile) as inzip, zipfile.ZipFile(dstfile, "w") as outzip:我们遍历输入 ZIP 文件中的所有文件:
modify_zip.py
for inzipinfo in inzip.infolist():如果我们遇到了要修改的文件,由其文件名 test.txt 标识:
modify_zip.py
if inzipinfo.filename == "test.txt":我们读取并修改内容…
modify_zip.py
with inzip.open(inzipinfo) as infile:
content = infile.read().replace("abc", "123")…并将修改后的内容写入输出 ZIP:
modify_zip.py
outzip.writestr("test.txt", content)否则,如果当前文件不是我们要修改的文件,我们只需使用以下命令将文件复制到输出 ZIP
modify_zip.py
outzip.writestr(inzipinfo.filename, infile.read())注意该算法始终从输入 ZIP .read() 文件,因此其整个内容将临时存储在内存中。因此,它不适用于解压后较大的文件。
Check out similar posts by category:
Python
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow