【问题标题】:Extract and rename zip file folder提取并重命名 zip 文件夹
【发布时间】:2013-10-27 12:54:33
【问题描述】:

我想在 python 中从一个 zip 文件中提取一个特定的文件夹,然后用原始文件名重命名它。

例如,我有一个名为 test.zip 的文件,其中包含多个文件夹和子文件夹:

xl/media/image1.png
xl/drawings/stuff.png
stuff/otherstuff.png

我希望将媒体文件夹的内容提取到名为 test 的文件夹中: test/image1.png

【问题讨论】:

  • 样板问题:到目前为止,您尝试了什么?如果有,请在问题中提及。

标签: python zip directory extract


【解决方案1】:

使用

例如:

#!/usr/bin/env python
"""Usage:
./extract.py test.zip
"""

from zipfile import ZipFile
import os
import sys
import tempfile
import shutil


ROOT_PATH = 'xl/media/'

zip_name = sys.argv[1]
zip_path = os.path.abspath(zip_name)
extraction_dir = os.path.join(os.getcwd(), os.path.splitext(zip_name)[0])
temp_dir = tempfile.mkdtemp()


with ZipFile(zip_path, 'r') as zip_file:
    # Build a list of only the members below ROOT_PATH
    members = zip_file.namelist()
    members_to_extract = [m for m in members if m.startswith(ROOT_PATH)]
    # Extract only those members to the temp directory
    zip_file.extractall(temp_dir, members_to_extract)
    # Move the extracted ROOT_PATH directory to its final location
    shutil.move(os.path.join(temp_dir, ROOT_PATH), extraction_dir)

# Uncomment if you want to delete the original zip file
# os.remove(zip_path)

print "Sucessfully extracted '%s' to '%s'" % (zip_path, extraction_dir)

使用try..except 块来处理在创建目录、删除文件和解压缩 zip 时可能发生的各种异常。

【讨论】:

  • 谢谢,当我指定 zip_name = 'test.zip' 但使用 sys.argv[1] 我得到一个错误:列表索引超出范围
  • 参见文件顶部的用法。您应该将 zip 文件名作为命令行上的第一个参数(对于此示例)。如果这不是您想要使用它的方式,请更改它以从您需要的任何地方获取文件名。
猜你喜欢
  • 1970-01-01
  • 2021-06-23
  • 2013-12-14
  • 2022-01-24
  • 2018-09-15
  • 2023-03-19
  • 2012-07-23
  • 1970-01-01
  • 2020-07-03
相关资源
最近更新 更多