Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การรองรับไฟล์ gzip ใน Python (โมดูล gzip)

GZip เป็นแอปพลิเคชันสำหรับบีบอัดและถอดการบีบอัดไฟล์ เป็นส่วนหนึ่งของโครงการ GNU โมดูล gzip ของ Python เป็นอินเตอร์เฟซสำหรับแอปพลิเคชัน GZip อัลกอริทึมการบีบอัด gzip โดยพื้นฐานแล้วอิงจากโมดูล zlib

โมดูล gzip ประกอบด้วยการนิยามคลาส GzipFile พร้อมเมธอดต่างๆ รวมถึงฟังก์ชันสะดวกคือ open(), compress() และ decompress()

วิธีที่ง่ายที่สุดในการบีบอัดและถอดการบีบอัดคือการใช้ฟังก์ชันเหล่านี้

ฟังก์ชัน open()

ฟังก์ชันนี้เปิดไฟล์ที่บีบอัดด้วย gzip ในโหมดไบนารีหรือข้อความ และคืนค่าออบเจ็กต์คล้ายไฟล์ ซึ่งอาจเป็นไฟล์จริง สตริง หรือไบนารี ค่าเริ่มต้นเปิดในโหมด 'rb' คืออ่านข้อมูลไบนารี แต่พารามิเตอร์ mode สามารถรับโหมดอื่นๆ ได้ดังนี้:

โหมดไบนารี: 'r', 'rb', 'a', 'ab', 'w', 'wb', 'x', 'xb'
โหมดข้อความ: 'rt', 'at', 'wt', 'xt'

ฟังก์ชันนี้ยังกำหนดระดับการบีบอัดที่ยอมรับค่าระหว่าง 0 ถึง 9 เมื่อเปิดในโหมดข้อความ ออบเจ็กต์ GzipFile จะถูกล็อปด้วย TextIOWrapper

ฟังก์ชัน compress()

ฟังก์ชันนี้ทำการบีบอัดข้อมูลที่ส่งเข้ามาและคืนค่าเป็นไบนารีที่บีบอัดแล้ว ค่าเริ่มต้นระดับการบีบอัดคือ 9

ฟังก์ชัน decompress()

ฟังก์ชันนี้ถอดการบีบอัดไบนารีและคืนค่าข้อมูลต้นฉบับ

ตัวอย่างสร้างไฟล์ gzip โดยเขียนข้อมูลที่บีบอัด:

>>> import gzip
>>> data = b'Python - Batteries included'
>>> with gzip.open("test.txt.gz", "wb") as f:
...     f.write(data)

จะสร้างไฟล์ "test.txt.gz" ในไดเรกทอรีปัจจุบัน ไฟล์เก็บถาวร gzip นี้มี "test.txt" อยู่ภายใน สามารถตรวจสอบได้ด้วยเครื่องมือถอดไฟล์

เพื่ออ่านไฟล์ที่บีบอัดนี้ทางโปรแกรม:

>>> with gzip.open("test.txt.gz", "rb") as f:
...     data = f.read()
>>> data
b'Python - Batteries included'

เพื่อบีบอัดไฟล์ที่มีอยู่เป็น gzip archive ให้อ่านข้อความในไฟล์และแปลงเป็น bytearray จากนั้นเขียน bytearray นั้นลงไฟล์ gzip ในตัวอย่างด้านล่าง สมมติว่าไฟล์ 'zen.txt' อยู่ในไดเรกทอรีปัจจุบัน

>>> fp = open("zen.txt", "rb")
>>> data = fp.read()
>>> bindata = bytearray(data)
>>> with gzip.open("zen.txt.gz", "wb") as f:
...     f.write(bindata)

เพื่อดึงไฟล์ต้นฉบับจาก gzip archive:

>>> fp = open("zen1.txt", "wb")
>>> with gzip.open("zen.txt.gz", "rb") as f:
...     bindata = f.read()
>>> fp.write(bindata)
>>> fp.close()

โค้ดด้านบนจะสร้าง 'zen1.txt' ในไดเรกทอรีปัจจุบัน ซึ่งมีข้อมูลเหมือน 'zen.txt' ทุกประการ

นอกจากฟังก์ชันสะดวกเหล่านี้ โมดูล gzip ยังมีคลาส GzipFile ที่นิยามเมธอด compress() และ decompress() คอนสตรัคเตอร์ของคลาสนี้รับอาร์กิวเมนต์ file, mode และ compressionlevel ซึ่งมีความหมายเหมือนกัน

เมื่อพารามิเตอร์ mode กำหนดเป็น 'w', 'wb' หรือ 'wt' ออบเจ็กต์ GzipFile จะให้เมธอด write() เพื่อบีบอัดข้อมูลที่ให้มาและเขียนลงไฟล์ gzip

>>> f = gzip.GzipFile("testnew.txt.gz", "wb")
>>> data = b'Python - Batteries included'
>>> f.write(data)
>>> f.close()

จะสร้างไฟล์ testnew.txt.gz สามารถถอดไฟล์ด้วยเครื่องมือใดๆ ได้ จะเห็นว่ามี testnew.txt พร้อมข้อความ 'Python – Batteries included'

เพื่อถอดการบีบอัดไฟล์ gzip โดยใช้ GzipFile ให้สร้างด้วยค่า mode เป็น 'rb' และอ่านข้อมูลที่ถอดการบีบอัดด้วยเมธอด read()

>>> f = gzip.GzipFile("testnew.txt.gz", "rb")
>>> data = f.read()
>>> data
b'Python - Batteries included'

ในบทความนี้เราเรียนรู้วิธีนำไลบรารี gzip ไปใช้งานด้วยโมดูล gzip ของ Python