การเขียน Code ให้ zip ไฟล์ด้วยภาษา Python

Zip คือการบีบอัดไฟล์จำนวนมากให้อยู่ภายในที่เดียวกันและมีขนาดที่เล็กลง โดยปรกติเราจะใช้โปรแกรมสำเร็จรูปจำพวก WinRAR หรือเราอาจจะเคยเห็นการเขียน code เพื่อ zip ของภาษาต่างๆ มาบ้างแล้ว เช่น Java หรือ C# วันนี้เราจะมาสอนการเขียน code เพื่อ zip ไฟล์ ด้วยภาษา Python กันบ้างโดย Library หลักๆ ที่เราจะใช้จะเป็น os กับ zipfile ซึ่งภายใน Folder ที่เราจะนำมาลองทำกันดูจะมีข้อมูลดังนี้

 

แสดงตำแหน่งของ Folder และ Files
แสดงตำแหน่งของ Folder และ Files

โดยวิธีการคือ

1. ทำการ Import library os กับ zipfile

import os
import zipfile as z

2. เราจะสร้าง ฟังก์ชั่นขึ้นมาเพื่อทำการอ่านข้อมูลของไฟล์ที่เราต้องการจะ zip ว่าอยู่ตำแหน่งไหนบ้าง

def zip_all_file(path, zipfi):
    for root, dirs, files in os.walk(path):
        for file in files:
            zipfi.write(os.path.join(root, file))

โดยเราจะทำการไล่เก็บผ่านการ loop ผ่าน method ที่ชื่อว่า os.walk โดยฟังชั่นนี้จะทำการ ไล่อ่านตำแหน่งของแต่ละ folder , file แล้วนำมาเก็บในตัวแปรที่ชื่อ root , dirs , file หากยังไม่เห็นภาพ ผมเลยลองนำ ค่าทั้ง 3 มาใช้คำสั่ง print เพื่อจะดูค่าข้างใน ผลลัพท์ที่ได้คือ


ผลลัพธ์ที่ได้จากการลอง print 3 ตัวแปร
ผลลัพธ์ที่ได้จากการ Print ตัวแปร 3 ตัว root , dirs , files

เห็นมั้ยครับพอมองแบบนี้แล้วจะสามารถเข้าใจง่ายขึ้นเยอะ หลังจากนั้น เราจะทำการ zip file ที่ทำการ loop หาจาก os.walk แล้วด้วยคำสั่ง

        for file in files:
            zipfi.write(os.path.join(root, file))

คือ ถ้าในตัวแปร files มี file อยู่จะทำการ loop เพื่อ zip folder และ file ภายใน 

ขั้นต่อไปเราจะมาเขียน code เพิ่มอีกนิดหน่อยภายใน ฟังก์ชั่นหลักกันตาม code ด้านล่างครับ

if __name__ == '__main__':
    zipf = z.ZipFile('Python.zip', 'w' )
    zip_all_file('Test_zip/', zipf)
    zipf.close()

โดยบรรทักแรกจะเป็นการสร้างตัวแปร เพื่อกำหนด ตัว zip ว่าจะใช้ชื่อไฟล์ที่ทำการบีบอัดแล้วว่าอะไร ซึ่งหลักการนี้สามารถศึกษาเพิ่มได้จาก

https://www.mindphp.com/forums/viewtopic.php?f=144&t=58953

และเราจะทำการเรียกใช้ ฟังก์ชั่น zip_all_file โดยกำหนดค่าตำแหน่งของ folder ที่เราจะทำการ zip และ ตัวแปรกำหนดค่า บรรทัดแรกที่เราได้ทำไว้แล้ว

 

ผลลัพท์ที่ได้ เมื่อเรารันโปรแกรมแล้วจะมี ไฟล์ zip ชื่อ Python.zip ที่เราได้ทำการกำหนดขึ้นมาซึ่งภายในจะประกอบไปด้วย Folder และ FIle ต่างๆที่้ราได้ทำการ เก็บเอาไว้

ผลลัพธ์ที่ได้จากการรันโปรแกรมคือจะมีไฟล์ zip เพิ่มเข้ามา
ผลลัพธ์ที่ได้จากการรันโปรแกรมจะมี ไฟล์ zip เพิ่มเข้ามา

อ้างอิง

zipfile — Work with ZIP archives.[ออนไลน์].เข้าถึงจาก : https://docs.python.org/3/library/zipfile.html.[10-Jan-2020]

Working with zip files in Python.[ออนไลน์].เข้าถึงจาก : https://www.geeksforgeeks.org/working-zip-files-python/.[10-Jan-2020]

os — Miscellaneous operating system interfaces.[ออนไลน์].เข้าถึงจาก : https://docs.python.org/3/library/os.html.[10-Jan-2020]

 

ช่องทางการศึกษาเพิ่มเติมข่าวที่น่าสนใจเกี่ยวกับ : คำสั่งในการทำงานของโมดูล Turtle ส่วนที่ 3 การควบคุมหน้าต่าง

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ดูแลเตียงผู้ป่วยอย่างไรให้คนที่บ้านอุ่นใจผู้ใช้ปลอดภัย
โดย mheimhei พฤ 21 ธ.ค. 2023 9:48 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
386
พฤ 21 ธ.ค. 2023 9:48 pm โดย mheimhei View Topic ดูแลเตียงผู้ป่วยอย่างไรให้คนที่บ้านอุ่นใจผู้ใช้ปลอดภัย
คำสั่งเปลี่ยน User เพื่อรันคำสั่งบน Linux Ubuntu
โดย mindphp พ 20 ธ.ค. 2023 4:01 am บอร์ด Linux - Web Server
0
358
พ 20 ธ.ค. 2023 4:01 am โดย mindphp View Topic คำสั่งเปลี่ยน User เพื่อรันคำสั่งบน Linux Ubuntu
โหลดเอกสารแล้วเหมือนถูก blocked แก้ยังไงคะ
โดย Narisara อ 19 ธ.ค. 2023 10:52 am บอร์ด ถาม - ตอบ คอมพิวเตอร์
1
306
พฤ 21 ธ.ค. 2023 12:59 pm โดย mindphp View Topic โหลดเอกสารแล้วเหมือนถูก blocked แก้ยังไงคะ
มี software ไหนสามารถมาใช้แทน vmware ได้บ้างครับ ที่เป็นแบบ free หรือ license ไม่แพง
โดย Anonymous จ 18 ธ.ค. 2023 4:00 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
2
492
จ 18 ธ.ค. 2023 4:14 pm โดย mindphp View Topic มี software ไหนสามารถมาใช้แทน vmware ได้บ้างครับ ที่เป็นแบบ free หรือ license ไม่แพง
สอบถามวิธีเช็คสิทธ์ การเข้าชมกระทู้ และการตอบกลับกระทู้ ใน phpBB
โดย flook จ 18 ธ.ค. 2023 1:10 pm บอร์ด สอบถามปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
3
781
ศ 22 ธ.ค. 2023 4:27 pm โดย flook View Topic สอบถามวิธีเช็คสิทธ์ การเข้าชมกระทู้ และการตอบกลับกระทู้ ใน phpBB
สอบถามฟิลด์ price lists ในหน้าตะกร้าสินค้า mooziicart
โดย Thanapoom1514 ศ 15 ธ.ค. 2023 12:26 pm บอร์ด Joomla Development
2
2890
ศ 15 ธ.ค. 2023 12:39 pm โดย Thanapoom1514 View Topic สอบถามฟิลด์ price lists ในหน้าตะกร้าสินค้า mooziicart
อัปเดตระบบการรักษาความปลอดภัยใหม่ของ Joomla 5.0.1 และ 4.4.1 เวอร์ชันล่าสุด
โดย Thanapoom1514 พฤ 14 ธ.ค. 2023 5:59 pm บอร์ด MindPHP News & Feedback
0
332
พฤ 14 ธ.ค. 2023 5:59 pm โดย Thanapoom1514 View Topic อัปเดตระบบการรักษาความปลอดภัยใหม่ของ Joomla 5.0.1 และ 4.4.1 เวอร์ชันล่าสุด
สอบถามปุ่มเลือกเอกสารกดแล้วมันไม่ขึ้น modal ในหน้าเพิ่มเมนู joomla 5 ครับ
โดย Thanapoom1514 พฤ 14 ธ.ค. 2023 11:45 am บอร์ด Joomla Development
2
2408
อ 19 ธ.ค. 2023 7:53 pm โดย Thanapoom1514 View Topic สอบถามปุ่มเลือกเอกสารกดแล้วมันไม่ขึ้น modal ในหน้าเพิ่มเมนู joomla 5 ครับ