用Python解压缩文件


Answers:


784
import zipfile
with zipfile.ZipFile(path_to_zip_file, 'r') as zip_ref:
    zip_ref.extractall(directory_to_extract_to)

差不多了!


7
如果所有.zip档案中.zip档案的内容相同怎么办?提取前如何重命名内容?例如:1.zip 2.zip ..全部包含content.txt:提取所有类似1content.txt 2content.txt的内容?
iratzhash

8
@iratzhash我通常使用tempfile为内容创建一个新的临时目录:docs.python.org/3/library/tempfile.html我解压缩到临时目录,然后从那里移动/整理文件。
Dave Forgac

8
@ 3kstc我会的from zipfile import ZipFile。使用它时,您不再需要使用zipfile.ZipFile,并且可以使用ZipFile(zip_file_name)
Debug255 '18

@iratzhash我知道你在1.5年前发表了评论。但是,正如其他人知道的那样,zip文件中的内容通常是只读的。一个不错的答案是“ bouke” 在这里
Debug255

一种元注释,但从2018年11月开始的编辑使此操作与已经使用上下文管理器的另一个答案(以及指向其含义的链接)几乎相同。
Engineero

304

如果您使用的是Python 3.2或更高版本:

import zipfile
with zipfile.ZipFile("file.zip","r") as zip_ref:
    zip_ref.extractall("targetdir")

您不需要使用closetry / catch,因为它使用了 上下文管理器构造。


18
ZipFile在2.7或更高版本中还可以用作上下文管理器:docs.python.org/2/library/zipfile.html#zipfile.ZipFile
FelixEnescu

如何处理docs.python.org/3.6/library/zipfile.html#zipfile.BadZipFile异常?通常,将try / except与上下文管理器一起使用(with-statement)的最佳实践是什么?
SnowOnion

1
zipfile+ pathlib=胜利。介意我是否稍微更新您的答案?
Datanovice

38

extractall如果您使用的是Python 2.6+,请使用该方法

zip = ZipFile('file.zip')
zip.extractall()

您是否不必指定目的地(zip.extractall(destination))?
asonnenschein

3
如果您只是将压缩文件解压缩到同一目录中,则不会这样
Dan Gayle

10
@DanGayle,这似乎是将zip文件解压缩到当前工作目录中,而不是zip文件的位置
Brian Leishman

4
对我来说,ZipFile()无法正常工作,但是zipfile.ZipFile()可以工作-导入zipfile之后
Agile Bean

6

您也只能导入ZipFile

from zipfile import ZipFile
zf = ZipFile('path_to_file/file.zip', 'r')
zf.extractall('path_to_extract_folder')
zf.close()

适用于Python 2Python 3


1
感谢您的关注@MylesHollowed但是,这不是已接受答案的副本。我同意它们彼此相似,但是彼此不同。您的评论也表明了这一点,因为被接受的绝对对您比我的要好。如果它是副本,那将是相同的...对于某人,我的答案可能很有价值,因为它可能更具可读性,并且您注意到导入的代码更少...正是由于这些差异,我决定把我的答案给另一种选择。这不是为什么我们在接受一个答案后还能提出其他答案吗?

这个答案有什么问题?为什么有人给她一个负面的观点?毕竟,它是对问题的答案,与其他答案相比,它的简单性使其与众不同,这对某些正在寻找答案的人而言可能很重要。是不是
simhumileco

1
@MylesHollowed 在3.6.5中import zipfile.ZipFile生成ModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a package。我很乐意接受我的操作员错误,但我不知道它是什么。
MikeF

6

尝试这个 :


import zipfile
def un_zipFiles(path):
    files=os.listdir(path)
    for file in files:
        if file.endswith('.zip'):
            filePath=path+'/'+file
            zip_file = zipfile.ZipFile(filePath)
            for names in zip_file.namelist():
                zip_file.extract(names,path)
            zip_file.close() 

path:解压缩文件的路径


3
import os 
zip_file_path = "C:\AA\BB"
file_list = os.listdir(path)
abs_path = []
for a in file_list:
    x = zip_file_path+'\\'+a
    print x
    abs_path.append(x)
for f in abs_path:
    zip=zipfile.ZipFile(f)
    zip.extractall(zip_file_path)

如果文件不是zip,则不包含对该文件的验证。如果文件夹包含非.zip文件,它将失败。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.