Python – Directory and Files Management

og:image

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”

  1. การตรวจสอบตำแหน่งของโฟลเดอร์อ้างอิง

    เราสามารถตรวจสอบตำแหน่งของโฟลเดอร์อ้างอิงโดยใช้ฟังก์ชัน 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/'
    
    
  2. การเปลี่ยนตำแหน่งที่ตั้งของโฟลเดอร์อ้างอิง

    เราสามารถทำการเปลี่ยนตำแหน่งที่ตั้งของโฟลเดอร์อ้างอิง ในช่วงระหว่างการรันคำสั่ง โดยใช้ฟังก์ชัน 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/
    
    
  3. การลิสต์ชื่อโฟลเดอร์และไฟล์

    การลิสต์ชื่อโฟลเดอร์และไฟล์นั้น สามารถใช้ฟังก์ชัน 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' ]
    
    
  4. การสร้างโฟลเดอร์ใหม่

    การสร้างโฟลเดอร์ขึ้นมาใหม่นั้น เราสามารถใช้ฟังก์ชัน 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' ]
    
    
  5. การเปลี่ยนชื่อของโฟลเดอร์

    เราสามารถทำการเปลี่ยนชื่อของโฟลเดอร์หรือไฟล์ โดยใช้ฟังก์ชัน 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' ]
    
    
  6. การลบไฟล์และโฟลเดอร์

    เราสามารถทำการลบไฟล์โดยใช้ฟังก์ชัน 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']
    
    

ที่มาของข้อมูล: https://www.programiz.com/python-programming/directory