파이썬에서 파일 압축 해제


435

zipfiledocumentation을 읽었 지만 파일의 압축푸는 방법을 이해할 수 없었고 파일 을 압축 하는 방법 만 이해할 수 없었습니다 . zip 파일의 모든 내용을 동일한 디렉토리에 압축 해제하려면 어떻게합니까?


관련 파일 : 압축 풀기 파일 재귀 적으로 stackoverflow.com/questions/28339000/… & stackoverflow.com/questions/36285502/…
Tung

답변:


785
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

@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")

당신은 사용할 필요가없는 가까이 또는 try / 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를 사용하는 가장 좋은 방법은 무엇입니까?
SnowOnion

1
zipfile+ pathlib= 승리. 답변을 약간 업데이트해도 괜찮습니까?
Datanovice

38

extractallPython 2.6 이상을 사용하는 경우이 방법을 사용하십시오.

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

목적지 (zip.extractall (destination))를 지정할 필요가 없습니까?
asonnenschein

3
당신은 단지 ZipFile를 같은 디렉토리에 압축 해제 싶으세요 경우
댄 게일

10
@ DanGayle 이것은 압축 파일의 위치가 아닌 현재 작업 디렉토리로 압축 파일을 추출하는 것으로 보입니다
Brian Leishman

4
나를 위해, ZipFile를 ()는 작동하지 않았다하지만 zipfile.ZipFile ()는 한 - 수입 ZipFile를 후
애자 콩에게

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

이 답변에 어떤 문제가 있습니까? 누군가 왜 그녀에게 부정적인 지적을 했습니까? 결국, 그것은 질문에 대한 답변이며 다른 답변에 비해 그 단순성으로 구별되며, 이는 답변을 찾는 일부 사람들에게 중요 할 수 있습니다. 그렇지 않습니까?
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() 

경로 : 압축 해제 파일의 경로


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 파일이 아닌 폴더가 있으면 실패합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.