หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ
โมดูลการ Serialization
โมดูลการบีบอัด
เป้าหมาย
รับข้อความและคำสั่งและบีบอัดสำหรับการจัดเก็บและการส่งต่อ
มีคำแนะนำในการสร้างหลายรายการ, การขนส่ง และรายการที่ถูกส่งเข้ามาซึ่งต้องย้ายหรือจัดเก็บไว้ ถึงแม้ว่าสิ่งเหล่านี้สามารถส่งออกได้ด้วยการส่งทุกอย่างด้วยตนเอง แต่วิธีที่ดีในการทำเช่นนี้คือการบีบอัดและขยายไฟล์แล้วจัดเก็บหรือส่งออก เพื่อทำเช่นนี้ คุณสามารถใช้โมดูลการบีบอัดเพื่อลดขนาดไฟล์และทำให้ข้อมูลง่ายต่อการจัดการ ต่างจากปัญหาอื่น ๆ ที่เราแก้ไขที่เราได้เรียนรู้และใช้โมดูลเดียว มีโมดูลการบีบอัดหลายตัวที่เราสามารถใช้ร่วมกับฟังก์ชันที่เลือกมาเล็กน้อยดังนี้:
สำหรับความเร็วในการบีบอัดที่รวดเร็วและการบีบอัดที่ต่ำ ให้ใช้โมดูล zlib โดยเพิ่ม import zlib สำหรับวัตถุประสงค์ของเราจะใช้ฟังก์ชันต่อไปนี้: zlib.compress() ซึ่งใช้หนึ่งอาร์กิวเมนต์ คือข้อมูลที่ต้องการบีบอัด อาร์กิวเมนต์ต้องถูกป้อนเป็นไบต์แทนที่จะเป็นสตริง
สำหรับความเร็วในการบีบอัดปานกลางและการบีบอัดปานกลาง ให้ใช้โมดูล bz2 โดยเพิ่ม import bz2 สำหรับวัตถุประสงค์ของเราจะใช้ฟังก์ชันต่อไปนี้:
bz2.compress(), ใช้หนึ่งอาร์กิวเมนต์ คือข้อมูลที่ต้องการบีบอัดbz2.decompress(), ใช้หนึ่งอาร์กิวเมนต์ คือข้อมูลที่ต้องการบีบอัด ต้องป้อนเป็นไบต์แทนที่จะเป็นสตริง
อาร์กิวเมนต์ต้องถูกป้อนเป็นไบต์แทนที่จะเป็นสตริง
สำหรับการบีบอัดสูง แต่ความเร็วในการบีบอัดช้า ให้ใช้โมดูล lzma โดยเพิ่ม import lzma สำหรับวัตถุประสงค์ของเราจะใช้คลาสและฟังก์ชันต่อไปนี้:
lzma.LZMACompressor(): คลาสที่ใช้สร้างวัตถุบีบอัดเพื่อให้คุณสามารถเปิดใช้งานเครื่องบีบอัดได้compress(): ใช้หนึ่งอาร์กิวเมนต์ คือข้อมูลที่ต้องการบีบอัด ต้องป้อนเป็นไบต์แทนที่จะเป็นสตริง
นอกจากโมดูลเหล่านี้แล้ว เราจะใช้ฟังก์ชัน bytes() ซึ่งช่วยให้คุณแปลงสตริงเป็นไบต์ ซึ่งจะเป็นประโยชน์ในการบีบอัด โดยรับอาร์กิวเมนต์สองตัว คือสตริงที่คุณต้องการแปลงและรูปแบบซึ่งสำหรับวัตถุประสงค์ของเราคือ 'utf-8'
มีค่าคงที่สามตัวที่มีข้อมูลที่ต้องบีบอัด ซึ่งมีชื่อว่า red_message , blue_message และ green_message ในการเริ่มต้นให้เดินไปยังเครื่องหมาย X สีทองที่อยู่บนพรมแดง สร้างตัวแปรชื่อ red_bytes นำค่าคงที่ red_message และแปลงข้อความเป็นไบต์เพื่อให้ข้อมูลสามารถบีบอัดได้ โดยใช้ฟังก์ชัน bytes() ที่ตั้งค่าเป็น 'utf-8' ดังนี้: red_bytes = bytes(red_message, 'utf-8')
สร้างตัวแปรชื่อ red_compression และเก็บค่าของ zlib.compress() โดยใช้ red_bytes เป็นอาร์กิวเมนต์ ซึ่งจะบีบอัดข้อมูล ดังนี้: red_compression = zlib.compress(red_bytes) เมื่อข้อมูลถูกบีบอัดแล้ว ให้ใช้ฟังก์ชัน display() ที่เขียนไว้ล่วงหน้าในตัวแก้ไขโค้ดและเพิ่มตัวแปร red_message และ red_compression เป็นอาร์กิวเมนต์เพื่ออ่านข้อความและดูข้อมูลการบีบอัด
เดินไปยังเครื่องหมาย X สว่างที่อยู่บนพรมแดงและเผชิญหน้ากับโต๊ะ สร้างตัวแปรสองตัวชื่อ: message_length และ compression_length ในตัวแปรเหล่านี้เราจะเก็บความยาวของอักขระของข้อมูลทั้งก่อนและหลังการบีบอัด โดยใช้ฟังก์ชัน len() ตัวอย่างเช่น สำหรับ message_length ให้รับความยาวของ red_message ดังนี้: message_length = len(red_message) ทำเช่นเดียวกันสำหรับ compression_length โดยเก็บ len() ของ red_compression
เมื่อทั้งสองตัวแปรถูกกำหนดค่าแล้ว ให้ใช้ฟังก์ชัน write() ที่เขียนไว้ล่วงหน้าและใส่ message_length และ compression_length เป็นอาร์กิวเมนต์เพื่อยืนยันขนาดการบีบอัด ซึ่งแสดงให้เห็นว่าไฟล์ถูกบีบอัดมากน้อยเพียงใดเมื่อเปรียบเทียบกับข้อมูลที่ไม่ได้บีบอัด
เดินไปยังเครื่องหมาย X มืดที่อยู่บนพรมสีน้ำเงิน เผชิญหน้ากับคอมพิวเตอร์ สร้างตัวแปรชื่อ blue_bytes และแปลง blue_message เป็นไบต์โดยใช้ฟังก์ชัน bytes() ในลักษณะเดียวกับที่ทำกับ red_message นำค่าคงที่ blue_message และบีบอัดโดยเก็บค่าของ bz2.compress() และใส่ blue_bytes เป็นอาร์กิวเมนต์เพื่อบีบอัดข้อมูล ดังนี้: blue_message = bz2.compress(blue_bytes)
สร้างตัวแปรชื่อ blue_decompress และเก็บค่าของ bz2.decompress() และเพิ่ม blue_message เป็นอาร์กิวเมนต์เพื่อดูข้อมูลหลังการขยาย ให้นำตัวแปร blue_message และ blue_decompress ไปใช้กับฟังก์ชัน display() ที่เขียนไว้ล่วงหน้าเพื่อดูตัวแปรข้อความในรูปแบบที่ถูกบีบอัดและที่ขยายออก
เดินไปยังเครื่องหมาย X มืดที่อยู่บนพรมสีเขียวและสร้างวัตถุชื่อ compressor และกำหนดค่าให้กับมันด้วย lzma.LZMACompressor() ซึ่งจะสร้างวัตถุเครื่องบีบอัดที่สามารถใช้กับฟังก์ชันของ lzma สร้างตัวแปรชื่อ green_bytes และแปลง green_message เป็นรูปแบบไบต์โดยใช้ฟังก์ชัน bytes() ในลักษณะเดียวกับที่ทำกับ red_message และ blue message
สร้างตัวแปรชื่อ green_compression และเก็บ compressor.compress() เป็นค่า โดยเพิ่ม green_bytes เป็นอาร์กิวเมนต์ ซึ่งจะช่วยให้คุณบีบอัดข้อมูลข้อความโดยใช้วัตถุเครื่องบีบอัด ในฟังก์ชัน display() ที่เขียนไว้ล่วงหน้า ให้นำตัวแปร green_message และ green_compression เป็นอาร์กิวเมนต์เพื่อดูข้อความและข้อมูลที่ถูกบีบอัด
เดินไปยังเครื่องหมาย X สว่างที่อยู่บนพรมสีเขียวและเผชิญหน้ากับโต๊ะ แก้ไขตัวแปรสองตัวชื่อ message_length และ compression_length ในตัวแปรเหล่านี้เราจะเก็บความยาวของอักขระของข้อมูลทั้งก่อนและหลังการบีบอัดโดยใช้ฟังก์ชัน len() สำหรับ message_length ให้รับความยาวของ green_message ด้วย len() ทำเช่นเดียวกันสำหรับ compression_length โดยเก็บ len() ของ green_compression เมื่อทั้งสองตัวแปรถูกกำหนดค่าแล้ว ให้ใช้ฟังก์ชัน write() ที่เขียนไว้ล่วงหน้าและใส่ message_length และ compression_length เป็นอาร์กิวเมนต์เพื่อยืนยันขนาดการบีบอัดและจบระดับ