การเขียนฟังก์ชันโหลดค่าจากไฟล์ .conf มาใช้งาน

ครูเอฟ
0

 


ในโปรเจกต์ต่าง ๆ ที่ต้องการตั้งค่าคอนฟิก เช่น การเชื่อมต่อกับฐานข้อมูล หรือการกำหนดค่าอื่น ๆ ที่ควรแยกออกจากโค้ดหลัก มักจะใช้ไฟล์ `.conf` หรือไฟล์คอนฟิกเพื่อจัดเก็บข้อมูลเหล่านี้ การโหลดค่าจากไฟล์ `.conf` ช่วยให้สามารถจัดการกับการตั้งค่าต่าง ๆ ได้ง่ายขึ้นและแยกออกจากโค้ดหลัก ทำให้การเปลี่ยนแปลงค่าไม่ต้องแก้ไขที่ตัวโปรแกรมโดยตรง แล้วยังสะดวกสบายต่อนักทดสอบ (tester) ที่อาจจะไม่คุ้นเคยกับโค้ดอีกด้วย

รูปแบบไฟล์ .conf
ไฟล์ `.conf` มักมีรูปแบบเหมือนไฟล์ text ทั่วไป และใช้รูปแบบการจัดเก็บที่เป็น key-value หรืออาจเป็นรูปแบบ sections เช่น

ตัวอย่างไฟล์ `settings.conf`:

โค้ด: เลือกทั้งหมด

[database]
host = localhost
port = 5432
user = admin
password = secret
dbname = testdb

[app]
debug = true
log_file = app.log
ไฟล์ `.conf` ด้านบนแบ่งเป็น 2 sections คือ `[database]` และ `[app]` ซึ่งใช้ในการจัดเก็บข้อมูลการเชื่อมต่อฐานข้อมูลและการตั้งค่าแอปพลิเคชัน

การเขียนฟังก์ชันโหลดค่าจากไฟล์ `.conf` ใน Python
ใน Python สามารถใช้ไลบรารี `configparser` ในการอ่านไฟล์ `.conf` ที่มีรูปแบบเหมือนตัวอย่างข้างต้นได้

ขั้นตอนการโหลดค่าจากไฟล์ .conf
  1. การติดตั้งไลบรารี `configparser`
    Python มีไลบรารีนี้ในตัวอยู่แล้ว ไม่จำเป็นต้องติดตั้งเพิ่มเติม
  2. การเขียนฟังก์ชันสำหรับโหลดไฟล์ `.conf`
    เราจะสร้างฟังก์ชันเพื่ออ่านค่าจากไฟล์คอนฟิกและนำมาใช้งานในโปรแกรมของเรา

    โค้ด: เลือกทั้งหมด

    import configparser
    
    def load_config(file_path):
        # สร้างออบเจ็กต์ configparser
        config = configparser.ConfigParser()
        
        # โหลดไฟล์คอนฟิก
        config.read(file_path)
    
        # ตรวจสอบว่าไฟล์ถูกอ่านหรือไม่
        if not config.sections():
            raise FileNotFoundError(f"ไม่พบไฟล์คอนฟิกที่ {file_path}")
        
        return config
    
    # ตัวอย่างการใช้งาน
    config_file = 'settings.conf'
    config = load_config(config_file)
    
    # อ่านค่าจาก section [database]
    db_host = config.get('database', 'host')
    db_port = config.getint('database', 'port')  # เปลี่ยนค่าเป็น int
    db_user = config.get('database', 'user')
    db_password = config.get('database', 'password')
    db_name = config.get('database', 'dbname')
    
    # อ่านค่าจาก section [app]
    debug_mode = config.getboolean('app', 'debug')  # เปลี่ยนค่าเป็น boolean
    log_file = config.get('app', 'log_file')
    
    print(f"Database Host: {db_host}")
    print(f"Database Port: {db_port}")
    print(f"Debug Mode: {debug_mode}")
    print(f"Log File: {log_file}")
    อธิบายโค้ด
    • `configparser.ConfigParser()`: สร้างออบเจ็กต์สำหรับอ่านไฟล์ `.conf`
    • `config.read(file_path)`: โหลดไฟล์คอนฟิกจากพาธที่กำหนด
    • `config.get(section, option)`: ใช้ในการอ่านค่าภายใน section และ option ที่ต้องการ เช่น `host` จาก section `database`
    • `config.getint()`: แปลงค่าที่อ่านได้เป็น integer (ใช้กับตัวเลข)
    • `config.getboolean()`: แปลงค่าที่อ่านได้เป็น boolean (ใช้กับค่าจริง/เท็จ เช่น `true` หรือ `false`)
ผลลัพธ์:
  • terminal

    โค้ด: เลือกทั้งหมด

    Database Host: localhost
    Database Port: 5432
    Debug Mode: True
    Log File: app.log
  • screenshot
    Screenshot.png
    Screenshot.png (2.15 KiB) Viewed 6 times

การโหลดค่าจากไฟล์ `.conf` ด้วยฟังก์ชันที่ใช้ไลบรารี `configparser` เป็นวิธีการที่สะดวกและยืดหยุ่นในการจัดการกับการตั้งค่าต่าง ๆ ในโปรแกรม Python ไฟล์คอนฟิกแยกข้อมูลที่เกี่ยวกับการตั้งค่าออกจากโค้ดหลัก ทำให้สามารถปรับแต่งหรือแก้ไขค่าได้ง่ายขึ้น และยังช่วยให้โปรแกรมสามารถทำงานได้ตามการตั้งค่าที่ผู้ใช้หรือผู้ดูแลระบบกำหนดหากเพื่อน ๆ สนใจสามารถดูการเขียน python เพิ่มเติมได้ที่บทเรียน Python หรือทำความรู้จัก Packages การสร้างและใช้งาน Packages ใน Python

อ้างอิง
https://www.mindphp.com/developer/tips-python/9884-retrieving-variable-data-from-a-config.html
https://www.askpython.com/python-modules/configparser-module
https://florian-dahlitz.de/articles/how-to-work-with-config-files-in-python
Tags

แสดงความคิดเห็น

0ความคิดเห็น

แสดงความคิดเห็น (0)