การเขียน 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 การควบคุมหน้าต่าง

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
การทำ natural language processing ด้วยภาษา python
โดย wightfall พ 24 เม.ย. 2024 12:54 pm บอร์ด Python Knowledge
0
2
พ 24 เม.ย. 2024 12:54 pm โดย wightfall View Topic การทำ natural language processing ด้วยภาษา python
การเขียนโปรแกรมเชิงวัตถุด้วยภาษา python
โดย wightfall อ 23 เม.ย. 2024 4:13 pm บอร์ด Python Knowledge
0
22
อ 23 เม.ย. 2024 4:13 pm โดย wightfall View Topic การเขียนโปรแกรมเชิงวัตถุด้วยภาษา python
แนะนำการเดินทางและสถานที่ท่องเที่ยวในจังหวัดตรังและการเดินทางไปกรุงเทพ
โดย wightfall จ 22 เม.ย. 2024 3:41 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
33
จ 22 เม.ย. 2024 3:41 pm โดย wightfall View Topic แนะนำการเดินทางและสถานที่ท่องเที่ยวในจังหวัดตรังและการเดินทางไปกรุงเทพ
ติดตั้ง ESXi ใหม่ จำเป็นต้อง Format Harddisk ก่อนติดตั้งไหมครับ
โดย จิ๊กโก๋ ส 20 เม.ย. 2024 2:29 pm บอร์ด ถาม - ตอบ คอมพิวเตอร์
3
158
อ 23 เม.ย. 2024 2:24 pm โดย mindphp View Topic ติดตั้ง ESXi ใหม่ จำเป็นต้อง Format Harddisk ก่อนติดตั้งไหมครับ
แจ้งปัญหาโพสบทความลงในเว็บบอร์ดส่วนตัวไม่ได้
โดย internTk21 ศ 19 เม.ย. 2024 11:56 am บอร์ด MindPHP News & Feedback
1
51
ศ 19 เม.ย. 2024 12:15 pm โดย internTk21 View Topic แจ้งปัญหาโพสบทความลงในเว็บบอร์ดส่วนตัวไม่ได้
สอบถาม Google Structure ที่เหมาะกับคอร์สเรียนควรใช้แบบไหนดีค่ะ
โดย eange08 ศ 19 เม.ย. 2024 9:56 am บอร์ด Programming - PHP
1
98
ศ 19 เม.ย. 2024 10:28 am โดย mindphp View Topic สอบถาม Google Structure ที่เหมาะกับคอร์สเรียนควรใช้แบบไหนดีค่ะ
คำสั่งรวมไฟล์ และ บีบอัดในคำสั่งเดียว tar, zip
โดย mindphp พ 17 เม.ย. 2024 7:42 pm บอร์ด Linux - Web Server
0
134
พ 17 เม.ย. 2024 7:42 pm โดย mindphp View Topic คำสั่งรวมไฟล์ และ บีบอัดในคำสั่งเดียว  tar, zip
เช็คขนาดพื้นที่ฐานข้อมูล แต่ละก้อน แต่ละฐานข้อมูลว่าใช้พื้นที่ไปเท่าไหร่ ด้วย Comamnd Line
โดย mindphp จ 15 เม.ย. 2024 11:10 pm บอร์ด PostgreSQL
1
305
จ 15 เม.ย. 2024 11:14 pm โดย mindphp View Topic เช็คขนาดพื้นที่ฐานข้อมูล แต่ละก้อน แต่ละฐานข้อมูลว่าใช้พื้นที่ไปเท่าไหร่ ด้วย Comamnd Line