【问题标题】:How to keep the zipped file's name after extracting it?解压后如何保留压缩文件的名称?
【发布时间】:2021-04-29 11:58:54
【问题描述】:

我有一个名为 model_A.zip 的 zip 文件,它是从 model_B.zip 重命名的。压缩model_B.zip的原始文件夹是model_B。我使用zipfile 提取它。

import zipfile
with zipfile.ZipFile('model_A.zip', "r") as zip_ref:
    zip_ref.extractall(path_to_unzip)

解压后,文件夹名称变为model_B/。但是,我想要的是model_A/。我可以使用shutil.move(model_B, model_A)之类的函数,但问题是我不知道解压后的文件夹名称(如果model_A.zipmodel_C.zip重命名,则文件夹名称为model_C)。

有没有办法在不进行额外操作的情况下获得model_A

【问题讨论】:

  • 我的猜测是问题不在于它是从model_B.zip重命名。问题在于 zip 文件 包含 一个名为 model_B 的文件夹,因为这是最初添加到其中的文件夹。然后,默认名称是model_B.zip,但它没有链接到其中的文件夹。无论您将其解压缩到哪个文件夹,该 zip 文件的内容都将位于名为 model_B 的子文件夹中。您可以通过在 GUI 中打开 zip 文件来验证这一点
  • @PranavHosangadi 是的,这是我忘记的导入信息。我将编辑我的帖子。
  • 什么文件夹的名字变成了model_B? zip 文件的名称与其中成员的名称无关。无论如何,看起来zip_ref.extractall('model_A') 会做你想做的事。
  • @martineau zip_ref.extractall('model_A') 将添加一个子文件夹,结果将是model_A/model_B/
  • 我认为这不是真的——你真的尝试过吗?另外,print(zip_ref.namelist()) 显示什么?

标签: python zip


【解决方案1】:

我从您的问题中收集到的是,您的 zip 文件中有一个顶级文件/目录。在提取之后或期间,您希望重命名该文件/目录。如果获取此顶级文件的名称是您的目标,那么以下代码可能会有所帮助。解压完成后,您可以重命名此文件/目录。

import zipfile
import os

path_to_unzip ="D:\\Codes"
zip_file_loc = 'D:\\Codes\\Solo\\File_Sorter2.zip'
rename = "model"
with zipfile.ZipFile(zip_file_loc, "r") as zip_ref:
    topdir = zip_ref.namelist()[0]
    if(topdir[-1] == '/'):
        topdir = topdir[:-1]
    zip_ref.extractall(path_to_unzip)
sp = topdir.split('.')
if len(sp)>1:
    rename = "model" + "." + sp[len(sp) - 1]
oldname = os.path.join(path_to_unzip, topdir)
newname = os.path.join(path_to_unzip, rename)
print(newname)
try:
    os.rename(oldname, newname)
except:
    print("Check if file already exists")

【讨论】:

  • 您的回答似乎有误,您可以验证后再编辑吗?
  • 它在我的系统中运行良好。不过,我现在已经提供了整个 python 文件。这现在肯定可以工作。请务必提供正确的 zip 文件位置和解压缩路径目录。请注意 path_to_unzip 是一个目录。另外,请在此说明您遇到的错误。
猜你喜欢
  • 2013-12-29
  • 2021-02-14
  • 2013-07-27
  • 2015-12-26
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多