Python – Directory and Files Management
สำหรับโปรเจคขนาดใหญ่ที่มีการแยกไฟล์ไว้เป็นกลุ่มตามการทำงานที่เกี่ยวเนื่องกัน อาจจะจัดการนำไฟล์เหล่านั้นมาจัดลงในโฟลเดอร์ย่อยๆ เพื่อจะง่ายต่อการเรียกใช้งาน, ค้นหาและทำการแก้ไข
เมื่อมีการแยกส่วนกันสำหรับไฟล์จำนวนมาก เมื่อจำเป็นต้องเรียกใช้งานเพื่อแก้ไข, เพิ่มข้อมูล หรือลบ ไฟล์เหล่านั้น เราก็จำเป็นที่จะต้องสามารถระบุตำแหน่งของแต่ละไฟล์และแต่โฟลเดอร์เหล่านั้น เพื่อจะสามารถดำเนินการได้ถูกต้อง
สำหรับ python นั้นสามารถเรียกใช้งานไลบรารี่ เช่น ไลบรารี่ os ในการเข้าถึงและทำการแก้ไขกับโครงสร้างการจัดเก็บข้อมูลของไฟล์และโฟลเดอร์เหล่านั้น พร้อมกับข้อมูลตำแหน่งที่ตั้งของไฟล์ต่างๆภายในระบบปฏิบัติการนั้นอีกด้วย
สำหรับในบทความนี้เราจะใช้ตัวอย่าง จากโครงสร้างการจัดเก็บข้อมูลภายในโฟลเดอร์หนึ่งที่ถูกเก็บไว้ตรงตำแหน่ง “/home/<user>/works/python_tutorial/directory_and_files_management/”( โดย <user>: อ้างอิงถึงชื่อผู้ใช้งานระบบปฏิบัติการ ซึ่งอาจจะเปลี่ยนแปลงตามชื่อผู้ใช้งานที่ใช้ login เข้าใช้ระบบปฏิบัติการ ณ เวลานั้น) สำหรับโฟลเดอร์ดังกล่าวนั้นทำการเก็บไฟล์สำหรับข้อมูลเวปไซต์เวปหนึ่ง โดยจะมี
ไฟล์ “index.html” สำหรับหน้าหลักของเวปไซต์
โฟลเดอร์ “css” สำหรับเก็บข้อมูลเกี่ยวกับ stylesheet
โฟลเดอร์ “javascript” สำหรับเก็บข้อมูลเกี่ยวกับฟังก์ชันต่างๆในภาษา javascript
โฟลเดอร์ “images” สำหรับเก็บรูปภาพที่จะต้องทำการใช้งานภายในเวปไซต์ดังกล่าว
โดยจะมีโครงสร้างของไฟล์และโฟลเดอร์ดังแผนภาพด้านล่างนี้นี้
สำหรับฟังก์ชันที่เรียกใช้งานในตัวอย่างสำหรับบทนี้นั้น ได้ทำการคำสั่งจาก python เวอร์ชัน 3.6.7 บนระบบปฏิบัติการลีนุกซ์ ซึ่งหากทำการรันคำสั่งเหล่านี้บนระบบปฏิบัติการอื่นๆ เช่น Windows, OSX การกำหนดตำแหน่งของไฟล์และการเรียกดูตำแหน่งของไฟล์นั้นอาจจะมีรูปแบบต่างกันไปตามระบบการจัดการของไฟล์และโฟลเดอร์ในระบบปฏิบัติการนั้นๆ เช่น
Linux: “/home/<user>/works/python_tutorial/directory_and_files_management/”
OSX: “/Users/<user>/works/python_tutorial/directory_and_files_management/”
Windows: “D:\works\python_tutorial\directory_and_file_management”
-
การตรวจสอบตำแหน่งของโฟลเดอร์อ้างอิง
เราสามารถตรวจสอบตำแหน่งของโฟลเดอร์อ้างอิงโดยใช้ฟังก์ชัน getcwd() จากไลบรารี่ os ฟังก์ชันดังกล่าว จะคืนค่าเป็นข้อมูลตำแหน่งของโฟลเดอร์อ้างอิงในรูปแบบข้อความ เรายังสามารถใช้ฟังก์ชัน getcwdb() ซึ่งจะคืนค่าตำแหน่งของโฟลเดอร์อ้างอิงนี้เช่นกันแต่เป็นรูปแบบไบต์ของข้อมูล
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # เรียกใช้งานไลบรารี่ os เพื่อดำเนินการข้อมูลเกี่ยวกับไฟล์และโฟลเดอร์ import os # เรียกใช้งานฟังก์ชัน getcwd() เพื่อทำการตรวจสอบว่าตำแหน่งของโฟลเดอร์ # อ้างอิงนั้นตั้งอยู่ที่ตำแหน่งใดในโครงสร้างไฟล์และโฟลเดอร์ที่ถูกเก็บ # อยู่ภายในระบบปฏิบัติการ print( os.getcwd() ) # โปรแกรมทำการปรินต์ค่า # /home/<user>/works/python_tutorial/directory_and_files_management/ # เรียกใช้งานฟังก์ชัน getcwdb() เพื่อทำการตรวจสอบว่าตำแหน่งของโฟลเดอร์ # อ้างอิงตั้งอยู่ที่ตำแหน่งใดในโครงสร้างไฟล์และโฟลเดอร์ที่ถูกเก็บ # อยู่ภายในระบบปฏิบัติการ แต่จะคืนค่าออกมาในรูปแบบไบนารี่แทนข้อความ print( os.getcwdb() ) # โปรแกรมทำการปรินต์ค่า # b'/home/<user>/works/python_tutorial/directory_and_files_management/'
-
การเปลี่ยนตำแหน่งที่ตั้งของโฟลเดอร์อ้างอิง
เราสามารถทำการเปลี่ยนตำแหน่งที่ตั้งของโฟลเดอร์อ้างอิง ในช่วงระหว่างการรันคำสั่ง โดยใช้ฟังก์ชัน chdir() จากไลบรารี่ os ฟังก์ชันนี้จะรับข้อมูลในรูปแบบข้อความซึ่งเป็นตำแหน่งอ้างอิงใหม่ที่ต้องการย้ายไป โดยภายในข้อมูลตำแหน่งที่ระบุ จะสามารถใช้ได้ทั้งเครื่องหมาย “/” หรือ “\” ในการคั่นข้อมูลโฟลเดอร์ แต่หากมีการใช้งานเครื่องหมาย “\” จะแนะนำให้มีการใช้ escape sequence ร่วมด้วยเพื่อป้องกันข้อผิดพลาดที่อาจเกิดขึ้นได้
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # เรียกใช้งานไลบรารี่ os เพื่อดำเนินการข้อมูลเกี่ยวกับไฟล์และโฟลเดอร์ import os # เรียกใช้งานฟังก์ชัน getcwd() เพื่อทำการตรวจสอบว่าตำแหน่งของโฟลเดอร์ # อ้างอิงนั้นตั้งอยู่ที่ตำแหน่งใดในโครงสร้างไฟล์และโฟลเดอร์ที่ถูกเก็บ # อยู่ภายในระบบปฏิบัติการ print( os.getcwd() ) # โปรแกรมทำการปรินต์ค่า # /home/<user>/works/python_tutorial/directory_and_files_management/ # เรียกใช้งานฟังก์ชัน chdir() ทำการเปลี่ยนตำแหน่งของโฟลเดอร์อ้างอิง # ให้เป็นตำแหน่งของโฟลเดอร์ที่ระบุเป็นข้อมูลให้กับฟังก์ชัน os.chdir("/home/<user>/works/python_tutorial/file_io/") # เรียกใช้งานฟังก์ชัน getcwd() เพื่อทำการตรวจสอบว่าตำแหน่งของโฟลเดอร์ # อ้างอิงนั้นตั้งอยู่ที่ตำแหน่งใดในโครงสร้างไฟล์และโฟลเดอร์ที่ถูกเก็บ # อยู่ภายในระบบปฏิบัติการ print( os.getcwd() ) # โปรแกรมทำการปรินต์ค่า # /home/<user>/works/python_tutorial/file_io/ -
การลิสต์ชื่อโฟลเดอร์และไฟล์
การลิสต์ชื่อโฟลเดอร์และไฟล์นั้น สามารถใช้ฟังก์ชัน listdir() จากไลบรารี่ os
โดยสำหรับคำสั่งนี้ จะรับค่าข้อมูลตำแหน่งของโฟลเดอร์ที่ต้องการลิสต์ชื่อไฟล์และโฟลเดอร์เข้าไป แล้วจึงทำการคืนค่าเป็นลิสต์ของชื่อโฟลเดอร์ย่อยและไฟล์ทั้งหมดที่อยู่ภายในตำแหน่งนั้นออกมา แต่ถ้าไม่ได้ทำการระบุตำแหน่งใดๆ ให้กับฟังก์ชัน โปรแกรมจะใช้ค่าตำแหน่งของโฟลเดอร์อ้างอิงแทน
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # เรียกใช้งานไลบรารี่ os เพื่อดำเนินการข้อมูลเกี่ยวกับไฟล์และโฟลเดอร์ import os # เรียกใช้งานฟังก์ชัน getcwd() เพื่อทำการตรวจสอบว่าตำแหน่งของโฟลเดอร์ # อ้างอิงนั้นตั้งอยู่ที่ตำแหน่งใดในโครงสร้างไฟล์และโฟลเดอร์ที่ถูกเก็บ # อยู่ภายในระบบปฏิบัติการ print( os.getcwd() ) # โปรแกรมทำการปรินต์ค่า # /home/<user>/works/python_tutorial/directory_and_files_management/ # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่อ้างอิง print( os.listdir() ) # โปรแกรมทำการปรินต์ค่า # [ 'javascript', 'images', 'css', 'index.html' ] # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ # ภายในโฟลเดอร์ที่ทำการระบุไปเป็นข้อมูลของฟังก์ชัน print( os.listdir('/home/<user>/works/python_tutorial/file_io') ) # โปรแกรมทำการปรินต์ค่า # [ 'data.csv', 'example.csv', 'graph_image.png', 'read_data.py' ] -
การสร้างโฟลเดอร์ใหม่
การสร้างโฟลเดอร์ขึ้นมาใหม่นั้น เราสามารถใช้ฟังก์ชัน mkdir() จากไลบรารี่ os ฟังก์ชันนี้จะรับข้อมูลตำแหน่งโฟลเดอร์ใหม่ที่ต้องการจะสร้างเข้าไป แล้วทำการสร้างโฟลเดอร์ที่ตำแหน่งนั้น แต่หากเราไม่ได้ทำการระบุตำแหน่งโฟลเดอร์ใหม่แบบเต็มรูปเข้าไป โดยทำการระบุเพียงชื่อโฟลเดอร์ โปรแกรมก็จะทำการสร้างโฟลเดอร์ใหม่อยู่ภายในที่ตั้งของโฟลเดอร์อ้างอิงโดยอัตโนมัติ
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # เรียกใช้งานไลบรารี่ os เพื่อดำเนินการข้อมูลเกี่ยวกับไฟล์และโฟลเดอร์ import os # เรียกใช้งานฟังก์ชัน getcwd() เพื่อทำการตรวจสอบว่าตำแหน่งของโฟลเดอร์ # อ้างอิงนั้นตั้งอยู่ที่ตำแหน่งใดในโครงสร้างไฟล์และโฟลเดอร์ที่ถูกเก็บ # อยู่ภายในระบบปฏิบัติการ print( os.getcwd() ) # โปรแกรมทำการปรินต์ค่า # /home/<user>/works/python_tutorial/directory_and_files_management/ # เรียกใช้งานฟังก์ชัน mkdir() เพื่อทำการสร้างโฟลเดอร์ใหม่ตามชื่อที่ระบุ # เป็นข้อมูลให้ฟังก์ชัน โดยจะทำการสร้างโฟลเดอร์นี้ไว้ภายในโฟลเดอร์อ้างอิง os.mkdir("data") # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ # ภายในโฟลเดอร์อ้างอิง print( os.listdir() ) # โปรแกรมทำการปรินต์ค่า # [ 'javascript', 'images', 'css', 'index.html', 'data' ] -
การเปลี่ยนชื่อของโฟลเดอร์
เราสามารถทำการเปลี่ยนชื่อของโฟลเดอร์หรือไฟล์ โดยใช้ฟังก์ชัน rename() จากไลบรารี่ os ซึ่งฟังก์ชันนี้จะรับข้อมูล ตัวแปรแรกเป็นข้อมูลของชื่อไฟล์หรือโฟลเดอร์ที่ต้องการจะเปลี่ยนชื่อ และตัวแปรที่สองจะรับข้อมูลชื่อของไฟล์หรือโฟลเดอร์ที่ตัองการกำหนดให้ใหม่
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # เรียกใช้งานไลบรารี่ os เพื่อดำเนินการข้อมูลเกี่ยวกับไฟล์และโฟลเดอร์ import os # เรียกใช้งานฟังก์ชัน getcwd() เพื่อทำการตรวจสอบว่าตำแหน่งของโฟลเดอร์ # อ้างอิงนั้นตั้งอยู่ที่ตำแหน่งใดในโครงสร้างไฟล์และโฟลเดอร์ที่ถูกเก็บ # อยู่ภายในระบบปฏิบัติการ print( os.getcwd() ) # โปรแกรมทำการปรินต์ค่า # /home/<user>/works/python_tutorial/directory_and_files_management/ # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ # ภายในโฟลเดอร์อ้างอิง print( os.listdir() ) # โปรแกรมทำการปรินต์ค่า # [ 'javascript', 'images', 'css', 'index.html', 'data' ] # เรียกใช้งานฟังก์ชัน rename() เพื่อเปลี่ยนชื่อโฟลเดอร์ที่ถูกเก็บอยู่ภายในโฟลเดอร์อ้างอิง # โดยทำการระบุชื่อโฟลเดอร์เดิม และระบุชื่อโฟลเดอร์ใหม่ให้กับฟังก์ชัน os.rename('data', 'datasources') # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ # ภายในโฟลเดอร์อ้างอิง print( os.listdir() ) # โปรแกรมทำการปรินต์ค่า # [ 'javascript', 'images', 'css', 'index.html', 'datasources' ] -
การลบไฟล์และโฟลเดอร์
เราสามารถทำการลบไฟล์โดยใช้ฟังก์ชัน remove() จากไลบรารี่ os และสามารถทำการลบโฟลเดอร์ที่ไม่มีข้อมูลอยู่ภายใน ด้วยฟังก์ชัน rmdir() จากไลบรารี่ os
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # เรียกใช้งานไลบรารี่ os เพื่อดำเนินการข้อมูลเกี่ยวกับไฟล์และโฟลเดอร์ import os # เรียกใช้งานฟังก์ชัน getcwd() เพื่อทำการตรวจสอบว่าตำแหน่งของโฟลเดอร์ # อ้างอิงนั้นตั้งอยู่ที่ตำแหน่งใดในโครงสร้างไฟล์และโฟลเดอร์ที่ถูกเก็บ # อยู่ภายในระบบปฏิบัติการ print( os.getcwd() ) # โปรแกรมทำการปรินต์ค่า # /home/<user>/works/python_tutorial/directory_and_files_management/ # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ # ภายในโฟลเดอร์อ้างอิง print( os.listdir()) # โปรแกรมทำการปรินต์ค่า # [ 'javascript', 'images', 'css', 'index.html', 'datasources'] # เรียกใช้งานฟังก์ชัน remove() เพื่อทำการลบไฟล์ข้อมูลที่อยู่ภายในโฟลเดอร์อ้างอิง # โดยทำการระบุชื่อไฟล์ที่ต้องการลบเป็นข้อมูลให้ฟังก์ชัน os.remove('index.html') # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ # ภายในโฟลเดอร์อ้างอิง print( os.listdir() ) # โปรแกรมทำการปรินต์ค่า # [ 'javascript', 'images', 'css', 'datasources'] # เรียกใช้งานฟังก์ชัน rmdir() เพื่อทำการลบโฟลเดอร์ที่อยู่ภายในโฟลเดอร์อ้างอิง # โดยทำการระบุชื่อโฟลเดอร์ที่ต้องการลบเป็นข้อมูลให้ฟังก์ชัน # ฟังก์ชันนี้สามารถทำการลบเฉพาะโฟลเดอร์ที่ไม่มีข้อมูลใดๆ อยู่ภายในเท่านั้น os.rmdir('datasources') # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ # ภายในโฟลเดอร์อ้างอิง os.listdir() # โปรแกรมทำการปรินต์ค่า # [ 'javascript', 'images', 'css']สำหรับฟังก์ชัน rmdir() ที่ใช้ในตัวอย่างข้างต้นนั้น เราสามารถใช้ฟังก์ชันดังกล่าวเพื่อทำการลบโฟลเดอร์ได้เฉพาะโฟลเดอร์ที่ไม่บรรรจุข้อมูลใดๆ เท่านั้น หากเราต้องการลบโฟลเดอร์ที่มีข้อมูลซ้อนกันเป็นลำดับภายใน เราควรใช้ฟังก์ชันอื่นๆ เช่น ฟังก์ชัน rmtree() ซึ่งเป็นฟังก์ชันของไลบรารี่ shutil
ตัวอย่างการใช้งาน# -*- coding: utf-8 -*- # เรียกใช้งานไลบรารี่ os เพื่อดำเนินการข้อมูลเกี่ยวกับไฟล์และโฟลเดอร์ import os # เรียกใช้งานไลบรารี่ shutil เพื่อดำเนินการลบโฟลเดอร์ที่มีข้อมูลย่อยซ้อนอยู่ภายในเป็นลำดับชั้น import shutil # เรียกใช้งานฟังก์ชัน getcwd() เพื่อทำการตรวจสอบว่าตำแหน่งของโฟลเดอร์ # อ้างอิงนั้นตั้งอยู่ที่ตำแหน่งใด ในโครงสร้างไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ภายในระบบ # ปฏิบัติการ print( os.getcwd() ) # โปรแกรมทำการปรินต์ค่า # /home/<user>/works/python_tutorial/directory_and_files_management/ # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ # ภายในโฟลเดอร์อ้างอิง print( os.listdir() ) # โปรแกรมทำการปรินต์ค่า # [ 'javascript', 'images', 'css'] # เรียกใช้งานฟังก์ชัน rmtree() จากไลบรารี่ shutil เพื่อทำการลบโฟลเดอร์ # ที่อยู่ภายในโฟลเดอร์อ้างอิง โดยทำการระบุชื่อโฟลเดอร์ที่ต้องการลบ # เป็นข้อมูลให้ฟังก์ชัน ซึ่งฟังก์ชันนี้สามารถทำการลบโฟลเดอร์ที่มีข้อมูลต่างๆ ซ้อนอยู่ # ภายในเป็นลำดับชั้นได้ shutil.rmtree('css') # เรียกใช้งานฟังก์ชัน listdir() เพื่อเรียกดูข้อมูลไฟล์และโฟลเดอร์ที่ถูกเก็บอยู่ # ภายในโฟลเดอร์อ้างอิง print( os.listdir() ) # โปรแกรมทำการปรินต์ค่า # [ 'javascript', 'images']

