การขยายไฟล์ใน Python


435

ฉันอ่านzipfileเอกสารแต่ไม่เข้าใจวิธีการแตกไฟล์, วิธีซิปไฟล์ ฉันจะคลายซิปเนื้อหาทั้งหมดของไฟล์ zip ลงในไดเรกทอรีเดียวกันได้อย่างไร


ที่เกี่ยวข้อง: การขยายไฟล์แบบกองซ้อนstackoverflow.com/questions/28339000/ ...... & stackoverflow.com/questions/36285502/…
ตุง

คำตอบ:


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 ทำให้เหมือนกันกับคำตอบอื่นที่ใช้ตัวจัดการบริบท (และเชื่อมโยงกับความหมาย)
Engineero

304

หากคุณใช้Python 3.2หรือใหม่กว่า:

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

คุณไม่จำเป็นต้องใช้การปิดหรือลอง / จับด้วยสิ่งนี้เนื่องจากมันใช้การ สร้างตัวจัดการบริบท


18
ZipFile ยังทำงานเป็นตัวจัดการบริบทใน 2.7 หรือใหม่กว่า: docs.python.org/2/library/zipfile.html#zipfile.ZipFile
FelixEnescu

วิธีจัดการกับdocs.python.org/3.6/library/zipfile.html#zipfile.BadZipFileข้อยกเว้น? โดยทั่วไปวิธีปฏิบัติที่ดีที่สุดในการใช้ลอง / ยกเว้นกับตัวจัดการบริบท (พร้อมคำสั่ง) คืออะไร
SnowOnion

1
zipfile+ pathlib= ชนะ รังเกียจไหมถ้าฉันตอบคำถามของคุณเล็กน้อย?
Datanovice

38

ใช้extractallวิธีนี้ถ้าคุณใช้ Python 2.6+

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

คุณไม่ต้องระบุปลายทาง (zip.extractall (ปลายทาง)) ใช่ไหม
asonnenschein

3
ไม่ใช่ถ้าคุณเพิ่งแยกลงในไดเรกทอรีเดียวกันกับไฟล์ zip
Dan Gayle

10
@DanGayle นี้ดูเหมือนจะแยกไฟล์ซิปลงในไดเรกทอรีปัจจุบันทำงานไม่ได้ตำแหน่งของไฟล์ซิป
ไบรอัน 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()

ทำงานในหลาม 2และงูหลาม 3


1
ขอบคุณสำหรับความสนใจ @MylesHollowed อย่างไรก็ตามนี่ไม่ใช่สำเนาจากคำตอบที่ยอมรับ ฉันยอมรับว่าพวกเขามีความคล้ายคลึงกัน แต่พวกเขาแตกต่างกัน นี่คือความคิดเห็นของคุณที่บ่งบอกด้วยเนื่องจากคนที่ยอมรับนั้นดีกว่าคุณอย่างแน่นอน หากเป็นสำเนาก็จะเหมือนกัน ... สำหรับใครบางคนคำตอบของฉันอาจมีค่าเพราะอาจจะอ่านได้มากกว่าและตามที่คุณสังเกตเห็นการนำเข้ารหัสน้อย ... เพราะความแตกต่างเหล่านี้ฉันตัดสินใจใส่คำตอบของฉัน เพื่อให้ทางเลือก นั่นไม่ใช่เหตุผลที่เราสามารถใส่คำตอบอื่น ๆ หลังจากยอมรับคำตอบได้หรือไม่ ดีที่สุด
simhumileco

เกิดอะไรขึ้นกับคำตอบนี้ ทำไมบางคนถึงให้คะแนนที่เป็นลบกับเธอ? ท้ายที่สุดมันเป็นคำตอบสำหรับคำถามและมีความแตกต่างจากความเรียบง่ายเมื่อเทียบกับคำตอบอื่น ๆ ซึ่งอาจมีความสำคัญสำหรับบางคนที่กำลังมองหาคำตอบ ไม่ใช่เหรอ
simhumileco

1
@MylesHollowed import zipfile.ZipFileสร้างModuleNotFoundError: No module named 'zipfile.ZipFile'; 'zipfile' is not a packageใน 3.6.5 ฉันเปิดให้มันเป็นข้อผิดพลาดของผู้ให้บริการในส่วนของฉัน แต่ฉันไม่รู้ว่ามันคืออะไร
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 ที่ไม่ถูกต้องไฟล์จะล้มเหลว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.