ให้เรตสมาชิก: 5 / 5

ดาวใช้งานดาวใช้งานดาวใช้งานดาวใช้งานดาวใช้งาน
 

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

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
อยากทราบวิธีการตรวจสอบตัวแปลภาษาใน phpbb ตัวไหนยังไม่มีการแปล
โดย Ittichai_chupol พ 08 เม.ย. 2020 10:57 am บอร์ด Programming - PHP
1
17
พ 08 เม.ย. 2020 12:24 pm โดย thatsawan
ปัญหาการใช้งาน MJUpgrade
โดย Anonymous อ 07 เม.ย. 2020 10:33 am บอร์ด MindPHP News & Feedback
5
33
อ 07 เม.ย. 2020 1:10 pm โดย mindphp
การรันไฟล์ .exe
โดย bumbim01 จ 06 เม.ย. 2020 8:25 pm บอร์ด Programming - C/C++ & java & Python
0
38
จ 06 เม.ย. 2020 8:25 pm โดย bumbim01
สรรพากรแจ้งข่าวดี ขยายเวลายื่นแบบฯ ให้ผู้ประกอบการทุกราย สู้ COVID19
โดย thatsawan จ 06 เม.ย. 2020 1:42 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
39
จ 06 เม.ย. 2020 1:42 pm โดย thatsawan
G -ข้อมูลสำหรับ ทำโปรแกรม ความต้องการของระบบที่ต้องทำ รวมเฟส 4
โดย mindphp จ 06 เม.ย. 2020 12:18 pm บอร์ด AZKing (Main)
1
10
จ 06 เม.ย. 2020 12:32 pm โดย mindphp
แนะนำบริการ hosting จาก Hostneverdie
โดย tumsailom อ 05 เม.ย. 2020 7:58 pm บอร์ด Web Hosting Review - Free Host Share Host VPS
0
159
อ 05 เม.ย. 2020 7:58 pm โดย tumsailom
อยากทราบถ้าหากต้องการที่ทดสอบการทำงานของของ Event cron จะต้องทำอย่างไรบางครับ
โดย Ittichai_chupol ส 04 เม.ย. 2020 10:50 am บอร์ด Programming - PHP
1
103
จ 06 เม.ย. 2020 11:39 am โดย mindphp
เทมเพลต Megadeal ของ MooZiiCart สำหรับทำเว็บขายสินค้าออนไลน์
โดย prmindphp ศ 03 เม.ย. 2020 6:39 pm บอร์ด MindPHP News & Feedback
0
139
ศ 03 เม.ย. 2020 6:39 pm โดย prmindphp
เครื่องมือช่วยกรองสินค้า สำหรับค้นหาสินค้าที่ต้องการ
โดย prmindphp พฤ 02 เม.ย. 2020 6:46 pm บอร์ด MindPHP News & Feedback
0
169
พฤ 02 เม.ย. 2020 6:46 pm โดย prmindphp
การเขียน Script สำหรับสร้าง User ใน Joomla
โดย tsukasaz พฤ 02 เม.ย. 2020 3:33 pm บอร์ด Joomla Developing Knowledge
0
231
พฤ 02 เม.ย. 2020 3:33 pm โดย tsukasaz
อยากทราบวิธีการดึงข้อมูลจาก Excel โดยการดึงข้อมูลจาก คอลัมของ Excel มาบันทึกลงในฐานข้อมูล
โดย Ittichai_chupol พฤ 02 เม.ย. 2020 10:09 am บอร์ด Programming - PHP
1
248
พฤ 02 เม.ย. 2020 10:43 am โดย mindphp
เอ้าๆ ใครที่ใบขับขี่หมดอายุในช่วง COVID-19 สามารถอมรมผ่านออนไลน์ ด้วย e-learning ได้เเล้วนะ
โดย thatsawan พฤ 02 เม.ย. 2020 10:09 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
137
พฤ 02 เม.ย. 2020 10:09 am โดย thatsawan
วิธีการเชื่อม api ของ gitlab สำหรับดาวน์โหลดไฟล์ project ใน ภาษา Python
โดย jirawoot พ 01 เม.ย. 2020 3:38 pm บอร์ด Python Knowledge
0
209
พ 01 เม.ย. 2020 3:38 pm โดย jirawoot
สอบถาม ผมจะทำ ci ของ gitlab ผมดูดไฟล์ project จาก api ของ gitlab ได้แล้วทำอย่างไรต่อครับ
โดย jirawoot พ 01 เม.ย. 2020 12:09 pm บอร์ด Programming - C/C++ & java & Python
3
190
พฤ 02 เม.ย. 2020 10:50 am โดย tsukasaz
ผมอัพเกรด joomla 2.5 เป็นเวอร์ชั่นล่าสุด 3.8 หน้าเว็บเวอร์ชั่นเดิมจะหายไปไหมคับ
โดย Anonymous พ 01 เม.ย. 2020 12:00 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS, CRM
3
189
พ 01 เม.ย. 2020 4:29 pm โดย icphp
ลดอัตราหัก ณ ที่จ่าย เหลือ 1.5% ออกเป็นกฎหมายมีผลใช้บังคับแล้ว!!! นะ เริ่ม 1 เมษายน 2563
โดย thatsawan พ 01 เม.ย. 2020 10:54 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
131
พ 01 เม.ย. 2020 10:54 am โดย thatsawan
วิธีการจัดการกับเด็กๆ กวนใจ เมื่อต้องทำงานจากบ้าน #Work from home
โดย thatsawan พ 01 เม.ย. 2020 9:53 am บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
111
พ 01 เม.ย. 2020 9:53 am โดย thatsawan
วิธีแก้ไขปัญหา สำหรับ การนำ Template phpbb 3.3 มาใช้ใน phpbb 3.2
โดย thatsawan อ 31 มี.ค. 2020 7:27 pm บอร์ด phpBB user Guide Knowledge
0
220
อ 31 มี.ค. 2020 7:27 pm โดย thatsawan
สอบถาม ผมลองใช้ curl ของ API ของ gitlab แล้ว "message":"401 Unauthorized ครับ
โดย jirawoot อ 31 มี.ค. 2020 5:16 pm บอร์ด Programming - C/C++ & java & Python
1
400
อ 31 มี.ค. 2020 5:35 pm โดย jirawoot
การเชื่อมต่อ API ของ GitLab เพื่อดาวน์โหลดไฟล์
โดย tsukasaz อ 31 มี.ค. 2020 12:52 pm บอร์ด PHP Knowledge
0
3382
อ 31 มี.ค. 2020 12:52 pm โดย tsukasaz