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

การรองรับการบีบอัด bzip2 ใน Python (โมดูล bz2)

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'