ZIP เป็นรูปแบบไฟล์ที่นิยมใช้กันมากที่สุดรูปแบบหนึ่งสำหรับการเก็บถาวรและการบีบอัด มีการใช้งานมาตั้งแต่สมัย MSDOS และ PC และถูกใช้โดยแอปพลิเคชั่น PKZIP ที่มีชื่อเสียง
โมดูล zipfile ในไลบรารีมาตรฐานของ Python มีคลาสที่อำนวยความสะดวกให้กับเครื่องมือสำหรับการสร้าง แยก อ่าน และเขียนไปยังไฟล์ ZIP
ZipFile()
ฟังก์ชันนี้ส่งคืนออบเจ็กต์ ZipFile จากพารามิเตอร์ไฟล์ซึ่งสามารถเป็นสตริงหรือออบเจ็กต์ไฟล์ที่สร้างขึ้นโดยฟังก์ชัน open() ในตัว ฟังก์ชันต้องการพารามิเตอร์โหมดที่มีค่าเริ่มต้นคือ 'r' แม้ว่าจะใช้ค่า 'w' หรือ 'a' ในการเปิดไฟล์เก็บถาวรในโหมดอ่าน เขียน หรือผนวกตามลำดับ
ไฟล์เก็บถาวรตามค่าเริ่มต้นจะไม่ถูกบีบอัด ในการระบุประเภทของอัลกอริธึมการบีบอัดที่จะใช้ จะต้องกำหนดหนึ่งในค่าคงที่ให้กับพารามิเตอร์การบีบอัด
zipfile.ZIP_STORED | สำหรับสมาชิกไฟล์เก็บถาวรที่ไม่มีการบีบอัด |
zipfile.ZIP_DEFLATED | สำหรับวิธีบีบอัดไฟล์ ZIP ปกติ สิ่งนี้ต้องการโมดูล zlib |
zipfile.ZIP_BZIP2 | สำหรับวิธีการบีบอัด BZIP2 ต้องใช้โมดูล bz2 |
zipfile.ZIP_LZMA | สำหรับวิธีการบีบอัด LZMA สิ่งนี้ต้องใช้โมดูล lzma |
วัตถุ ZipFile ใช้วิธีการดังต่อไปนี้
เขียน()
เมธอดนี้กำหนดไฟล์ให้กับไฟล์เก็บถาวรที่แสดงโดยออบเจกต์ ZipFile
>>> import zipfile >>> newzip=zipfile.ZipFile('newdir/newzip.zip','w') >>> newzip.write('zen.txt') >>> newzip.close()
ไฟล์เพิ่มเติมสามารถเพิ่มลงในไฟล์เก็บถาวรที่มีอยู่แล้วได้โดยเปิดไฟล์ในโหมดผนวก ('a' เป็นโหมด)
>>> newzip=zipfile.ZipFile('newdir/newzip.zip','a') >>> newzip.write('zen.txt') >>> newzip.close()
อ่าน()
เมธอดนี้อ่านข้อมูลจากไฟล์เฉพาะในไฟล์เก็บถาวร
>>> newzip=zipfile.ZipFile('newdir/newzip.zip','r') >>> data=newzip.read('json.txt') >>> data b'["Rakesh", {"marks": [50, 60, 70]}]'
printdir()
เมธอดนี้แสดงรายการไฟล์ทั้งหมดในไฟล์เก็บถาวรที่กำหนด
>>> newzip.printdir() File Name Modified Size json.txt 2018-11-2717:04:40 35 zen.txt 2018-11-2523:13:44 878
สารสกัด()
เมธอดนี้จะแยกไฟล์ที่ระบุจากไฟล์เก็บถาวรโดยค่าเริ่มต้นไปยังไดเร็กทอรีปัจจุบันหรือจากไฟล์ที่กำหนดเป็นพารามิเตอร์ที่สอง
>>> newzip.extract('json.txt','newdir') 'newdir\\json.txt'
แตกไฟล์()
เมธอดนี้จะแตกไฟล์ทั้งหมดในไฟล์เก็บถาวรไปยังไดเร็กทอรีปัจจุบันตามค่าเริ่มต้น ระบุไดเร็กทอรีสำรองหากต้องการเป็นพารามิเตอร์
>>> newzip.extractall('newdir')
getinfo()
เมธอดนี้ส่งคืนวัตถุ ZipInfo ที่สอดคล้องกับไฟล์ที่กำหนด ออบเจ็กต์ ZipInfo มีข้อมูลเมตาดาต้าที่แตกต่างกันของไฟล์
รหัสต่อไปนี้รับวัตถุ ZipInfo ของ 'zen.txt' จากไฟล์เก็บถาวรและดึงข้อมูลชื่อไฟล์ ขนาด และวันที่-เวลาจากมัน
>>> inf = newzip.getinfo('zen.txt') >>> inf.filename,inf.file_size, inf.date_time ('zen.txt', 878, (2018, 11, 25, 23, 13, 45))
infolist()
เมธอดนี้ส่งคืนรายการออบเจ็กต์ ZipInfo ของไฟล์ทั้งหมดในไฟล์เก็บถาวร
>>> newzip.infolist() [<ZipInfo filename = 'json.txt' filemode='-rw-rw-rw-' file_size=35>, <ZipInfo filename = 'zen.txt' filemode='-rw-rw-rw-' file_size=878>]
ดังที่ได้กล่าวไว้ก่อนหน้านี้ อัลกอริธึมการบีบอัดที่จะใช้ในขณะที่สร้างไฟล์ ZIP ถูกระบุในพารามิเตอร์การบีบอัด ในโค้ดต่อไปนี้ ค่าคงที่ของ ZIP-DEFLATED จะสร้างไฟล์เก็บถาวรโดยใช้การบีบอัด zlib
>>> zipobj = zipfile.ZipFile('txtzip.zip',mode='w', compression=zipfile.ZIP_DEFLATED) >>> files=glob.glob("*.txt") >>> for file in files: zipobj.write(file) >>> zipobj.close()
namelist()
วิธีการนี้ของวัตถุ ZipFile จะส่งคืนรายการไฟล์ทั้งหมดในไฟล์เก็บถาวร
>>> zipobj = zipfile.ZipFile('txtzip.zip',mode='r') >>> zipobj.namelist() ['a!.txt', 'data().txt', 'dict.txt', 'json.txt', 'LICENSE.txt', 'lines.txt', 'msg.txt', 'NEWS.txt', 'test.txt/', 'zen.txt', 'zen1.txt', 'zenbak.txt']
setpassword()
เมธอดนี้ตั้งค่าพารามิเตอร์รหัสผ่านซึ่งต้องระบุในขณะที่แตกไฟล์เก็บถาวร
PyZipFile()
ฟังก์ชันนี้ในโมดูล zipfile จะคืนค่าอ็อบเจ็กต์ PyZipFile วัตถุ PyZipFile สามารถสร้างโมดูลที่มีไฟล์ที่มีนามสกุล .py ไฟล์เก็บถาวรนี้สามารถเพิ่มในตัวแปรสภาพแวดล้อม sys.path เพื่อให้สามารถนำเข้าโมดูลโดยใช้โมดูล zipimport
วิธี writepy() จะเพิ่มไฟล์ .py ในไฟล์เก็บถาวรหลังจากรวบรวมในไฟล์ .pyc ตามลำดับ
files=glob.glob("*.py") >>> pyzipobj = zipfile.PyZipFile('pyfiles/pyzip.zip', mode='w', compression=zipfile.ZIP_LZMA) >>> for file in files: pyzipobj.writepy(file) >>> pyzipobj.close()
ในบทความนี้ได้มีการกล่าวถึงคลาสและฟังก์ชันในโมดูล zipfile