bzip2 เป็นอัลกอริทึมโอเพนซอร์สสำหรับการบีบอัดและถอดการบีบอัดไฟล์ โมดูล bz2 ของ Python ให้ฟังก์ชันการทำงานเพื่อนำอัลกอริทึม bzip2 ไปใช้งานได้ทางโปรแกรม
ฟังก์ชัน open()
ฟังก์ชันนี้เป็นอินเตอร์เฟซหลักของโมดูล ใช้เปิดไฟล์ที่บีบอัดด้วย bzip2 และคืนค่าเป็นออบเจ็กต์ไฟล์ สามารถเปิดในโหมดไบนารีหรือข้อความ พร้อมสิทธิ์อ่าน/เขียน ฟังก์ชันทำการบีบอัดตามอาร์กิวเมนต์ compressionlevel ระหว่าง 1 ถึง 9
เมธอด write()
เมื่อเปิดไฟล์ในโหมด 'w' หรือ 'wb' เมธอดนี้จะพร้อมใช้งานกับออบเจ็กต์ไฟล์ ในโหมดไบนารี จะเขียนข้อมูลไบนารีที่บีบอัดแล้วลงไฟล์ ในโหมดข้อความปกติ ออบเจ็กต์ไฟล์จะถูกล็อปด้วย TextIOWrapper เพื่อทำการเข้ารหัส
เมธอด read() − เมื่อเปิดในโหมดอ่าน ฟังก์ชันนี้จะอ่านและคืนค่าข้อมูลที่ถอดการบีบอัดแล้ว
โค้ดตัวอย่างต่อไปนี้เขียนข้อมูลที่บีบอัดลงไฟล์ bzip2:
>>> import bz2
>>> f = bz2.open("test.bz2", "wb")
>>> data = b'Welcome to TutorialsPoint'
>>> f.write(data)
>>> f.close()
จะสร้างไฟล์ test.bz2 ในไดเรกทอรีปัจจุบัน เครื่องมือถอดไฟล์จะแสดงไฟล์ 'test' อยู่ภายใน เพื่ออ่านข้อมูลที่ถอดการบีบอัดจาก test.bz2 ใช้โค้ดดังนี้:
>>> f = bz2.open("test.bz2", "rb")
>>> data = f.read()
>>> data
b'Welcome to TutorialsPoint'
โมดูล bz2 ยังนิยามคลาส BZ2File ออบเจ็กต์ของคลาสนี้ทำหน้าที่เป็นคอมเพรสเซอร์และดีคอมเพรสเซอร์ ขึ้นอยู่กับพารามิเตอร์ mode ที่ส่งให้คอนสตรัคเตอร์
BZ2File()
เป็นคอนสตรัคเตอร์ ต้องการพารามิเตอร์ file และ mode เหมือนฟังก์ชัน open() compressionlevel ค่าเริ่มต้นคือ 9 และสามารถระบุได้ระหว่าง 1 ถึง 9
BZ2Compressor()
ฟังก์ชันนี้คืนค่าออบเจ็กต์ของคลาส Incremental compressor การเรียกเมธอด compress() แต่ละครั้งจะคืนค่าข้อมูลที่บีบอัดเป็นชิ้นๆ (chunk) ชิ้นข้อมูลหลายชิ้นสามารถต่อกันได้และเขียนลงไฟล์ bzip2 ท้ายที่สุด
เมธอด flush()
เมธอดนี้จะว่างเปล่าบัฟเฟอร์และคืนค่าข้อมูลในบัฟเฟอร์เพื่อต่อท้ายกับออบเจ็กต์ที่บีบอัด
BZ2Decompressor()
ฟังก์ชันนี้คืนค่าออบเจ็กต์ incremental decompressor ชิ้นข้อมูลที่ถอดการบีบอัดแต่ละชิ้นต่อรวมกับข้อมูลที่ flush แล้ว จะได้ข้อมูลที่ไม่ได้บีบอัด
ตัวอย่างต่อไปนี้บีบอัดแต่ละรายการในลิสต์และเขียนไบนารีที่ต่อกันแล้วลงไฟล์ ข้อมูลถูกดึงคืนโดยออบเจ็กต์ BZ2Decompressor:
>>> import bz2
>>> data = [b'Hello World', b'How are you?', b'welcome to Python']
>>> obj = bz2.BZ2Compressor()
>>> f = bz2.open("test.bz2", "wb")
>>> d1 = obj.compress(data[0])
>>> d2 = obj.compress(data[1])
>>> d3 = obj.compress(data[2])
>>> d4 = obj.flush()
>>> compressedobj = d1 + d2 + d3 + d4
>>> f.write(compressedobj)
>>> f.close()
>>> obj = bz2.BZ2Decompressor()
>>> f = bz2.open("test.bz2", "rb")
>>> data = f.read()
>>> obj.decompress(data)
b'Hello WorldHow are you?welcome to Python'