🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

มาจัดการไฟล์และไดเรกทอรีอย่างอิสระด้วยโมดูล os ของ Python กันเถอะ!

หากต้องการเรียกใช้ Python ผ่าน Command Prompt หรือ PowerShell บนคอมพิวเตอร์ของคุณ คุณจำเป็นต้องดาวน์โหลดและติดตั้ง Python ก่อน
หากคุณยังไม่ได้ติดตั้ง กรุณาดูบทความ การติดตั้ง Python และการตั้งค่าสภาพแวดล้อมการพัฒนา เพื่อทำการติดตั้ง Python

เวลาที่เราดูแลเว็บไซต์ บ่อยครั้งที่เราต้องจัดการกับไฟล์บนเซิร์ฟเวอร์ เช่น จัดระเบียบรูปภาพที่อัปโหลด หรือทำการสำรองข้อมูลอย่างสม่ำเสมอใช่ไหมครับ? ใน럴 때 Python의 โมดูล os ของ Python ก็เข้ามามีบทบาทสำคัญอย่างยิ่ง

โมดูล os เป็นไลบรารีมาตรฐานของ Python สำหรับการทำงานกับฟังก์ชันของระบบปฏิบัติการ (OS) โดยเฉพาะการจัดการระบบไฟล์ ด้วยโมดูลนี้ เราสามารถทำให้การสร้าง, ลบ, และเปลี่ยนชื่อไฟล์และไดเรกทอรีที่เราปกติทำด้วยเมาส์หรือคอมมานด์ไลน์เป็นแบบอัตโนมัติได้จากโปรแกรม

ในบทความนี้ เราจะมาแนะนำตั้งแต่พื้นฐานการใช้งานโมดูล os ไปจนถึงตัวอย่างการประยุกต์ใช้จริง พร้อมด้วยโค้ดที่สามารถคัดลอกและนำไปใช้ได้ทันที เพื่อให้เว็บครีเอเตอร์ทุกคนสามารถนำไปใช้ได้ทันทีเมื่อคิดว่า "อยากจะทำงานเล็กๆ น้อยๆ ให้เป็นอัตโนมัติ" เรามาข้ามทฤษฎีที่ซับซ้อนไปก่อน แล้วมาสัมผัสกับความสนุกของการ "ทำให้มันทำงานได้" กันดีกว่า! 🚀


พื้นฐานการใช้งานโมดูล os

เริ่มต้นจากพื้นฐานกันก่อน เรามาดูการเตรียมตัวสำหรับการใช้โมดูล os และฟังก์ชันพื้นฐานที่ใช้บ่อยๆ กัน การทำงานที่ซับซ้อนใดๆ ก็ล้วนมาจากการผสมผสานพื้นฐานเหล่านี้เข้าด้วยกัน

1. การ Import โมดูล os

ในการใช้โมดูล os เราต้องทำการ import (นำเข้า) ที่ส่วนบนสุดของสคริปต์ Python ก่อนเสมอครับ ซึ่งก็เหมือนกับคาถาวิเศษอย่างหนึ่งเลยทีเดียว

import os

2. การตรวจสอบไดเรกทอรีที่ทำงานอยู่ปัจจุบัน - getcwd()

การรู้ว่าโปรแกรมของเรากำลังทำงานอยู่ที่ไหน (ไดเรกทอรีทำงานปัจจุบัน) เป็นพื้นฐานของการทำงาน เราสามารถตรวจสอบได้ด้วย `os.getcwd()` (getcwd ย่อมาจาก get current working directory)

import os

# ดึงและแสดงไดเรกทอรีที่ทำงานอยู่ปัจจุบัน
current_path = os.getcwd()
print(f"ไดเรกทอรีปัจจุบัน: {current_path}")

# ตัวอย่างผลลัพธ์:
# ไดเรกทอรีปัจจุบัน: /Users/yourname/Documents

3. การสร้างไดเรกทอรี - mkdir(), makedirs()

เรามาสร้างโฟลเดอร์ (ไดเรกทอรี) ใหม่กัน `os.mkdir()` ใช้สร้างไดเรกทอรีเดียว หากต้องการสร้างไดเรกทอรีซ้อนกันหลายชั้น `os.makedirs()` จะสะดวกกว่ามาก

ก่อนอื่น มาดูตัวอย่างการสร้างไดเรกทอรีเดียวด้วย `mkdir()`

import os

# สร้างไดเรกทอรีชื่อ "my_project"
# โปรดตรวจสอบให้แน่ใจว่าไม่มีไดเรกทอรีชื่อเดียวกันอยู่ก่อนที่จะรัน
if not os.path.exists("my_project"):
    os.mkdir("my_project")
    print("สร้างไดเรกทอรี my_project แล้ว")
else:
    print("ไดเรกทอรี my_project มีอยู่แล้ว")

ต่อไป เราจะใช้ `makedirs()` เพื่อสร้างไดเรกทอรีที่มีความสัมพันธ์แบบแม่-ลูก เช่น `parent/child` ในครั้งเดียว การใส่ `exist_ok=True` จะช่วยให้ไม่เกิดข้อผิดพลาดแม้ว่าไดเรกทอรีนั้นจะมีอยู่แล้วก็ตาม

import os

# สร้างไดเรกทอรีซ้อนกัน "contents/images" ในครั้งเดียว
# เนื่องจากมี exist_ok=True จึงไม่เกิดข้อผิดพลาดหากไดเรกทอรีมีอยู่แล้ว
os.makedirs("contents/images", exist_ok=True)
print("สร้างไดเรกทอรี contents/images แล้ว (หรือมีอยู่แล้ว)")

4. การดึงรายชื่อไฟล์และไดเรกทอรี - listdir()

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

import os

# ดึงรายชื่อไฟล์และไดเรกทอรีของไดเรกทอรีปัจจุบัน
# หากสร้าง "my_project" หรือ "contents" ไว้ล่วงหน้า จะแสดงรายการเหล่านั้นด้วย
items = os.listdir('.') # '.' หมายถึงไดเรกทอรีปัจจุบัน
print(f"เนื้อหาของไดเรกทอรีปัจจุบัน: {items}")

# ตัวอย่างผลลัพธ์:
# เนื้อหาของไดเรกทอรีปัจจุบัน: ['my_project', 'contents', 'my_script.py']

5. การรวมพาทอย่างปลอดภัย - path.join()

การรวมสตริงพาทด้วยตัวเอง เช่น `"folder" + "/" + "file.txt"` นั้นอันตราย! เพราะตัวคั่นพาทจะแตกต่างกันไปในแต่ละ OS (Windows ใช้ `\`, Mac และ Linux ใช้ `/`) การใช้ `os.path.join()` จะช่วยรวมพาทด้วยตัวคั่นที่เหมาะสมกับ OS ที่กำลังทำงานอยู่โดยอัตโนมัติ ทำให้ปลอดภัยอย่างยิ่ง

import os

# การรวมพาทที่ปลอดภัยและไม่ขึ้นกับ OS
dir_name = "assets"
file_name = "style.css"

# โค้ดนี้ทำงานได้อย่างถูกต้องทั้งบน Windows, Mac และ Linux
correct_path = os.path.join(dir_name, "css", file_name)
print(f"พาทที่สร้างขึ้น: {correct_path}")

# ตัวอย่างผลลัพธ์ (Mac/Linux):
# พาทที่สร้างขึ้น: assets/css/style.css

# ตัวอย่างผลลัพธ์ (Windows):
# พาทที่สร้างขึ้น: assets\css\style.css

6. การเปลี่ยนชื่อ / ย้ายไฟล์และไดเรกทอรี - rename()

`os.rename()` ไม่เพียงแต่ใช้เปลี่ยนชื่อไฟล์หรือไดเรกทอรีเท่านั้น แต่ยังใช้ย้ายได้อีกด้วย หากระบุไดเรกทอรีอื่นเป็นปลายทาง ก็จะสามารถย้ายไปยังที่นั่นได้

import os

# สร้างไฟล์ทดสอบชื่อ "old_name.txt"
with open("old_name.txt", "w") as f:
    f.write("test")

# เปลี่ยนชื่อ "old_name.txt" เป็น "new_name.txt"
if os.path.exists("old_name.txt"):
    os.rename("old_name.txt", "new_name.txt")
    print("เปลี่ยนชื่อ old_name.txt เป็น new_name.txt แล้ว")

# ตรวจสอบ
print(f"เนื้อหาของไดเรกทอรีปัจจุบัน: {os.listdir('.')}")

7. การลบไฟล์และไดเรกทอรี - remove(), rmdir()

การลบไฟล์และไดเรกทอรีก็ทำได้ง่ายๆ ใช้ `os.remove()` สำหรับการลบไฟล์ และ `os.rmdir()` สำหรับการลบไดเรกทอรีที่ว่างเปล่า โปรดระวังว่า `rmdir()` ไม่สามารถลบไดเรกทอรีที่มีเนื้อหาอยู่ภายในได้

import os

# สร้างไฟล์ทดสอบชื่อ "temp_file.txt"
with open("temp_file.txt", "w") as f:
    f.write("delete me")

# สร้างไดเรกทอรีทดสอบชื่อ "temp_dir"
if not os.path.exists("temp_dir"):
    os.mkdir("temp_dir")

# ลบไฟล์
if os.path.exists("temp_file.txt"):
    os.remove("temp_file.txt")
    print("ลบ temp_file.txt แล้ว")

# ลบไดเรกทอรีที่ว่างเปล่า
if os.path.exists("temp_dir"):
    os.rmdir("temp_dir")
    print("ลบ temp_dir แล้ว")

【ภาคปฏิบัติ】มาลองใช้โมดูล os กัน!

เมื่อเข้าใจพื้นฐานแล้ว ต่อไปเรามาดูโค้ดที่ใช้งานได้จริงกันดีกว่า ตัวอย่างเหล่านี้อาจช่วยให้งานประจำวันของคุณง่ายขึ้นเล็กน้อย

ตัวอย่างการประยุกต์ใช้ที่ 1: จัดระเบียบไฟล์รูปภาพหลายไฟล์ตามนามสกุล

ในโฟลเดอร์ดาวน์โหลดหรือโฟลเดอร์ทรัพยากรของคุณมีไฟล์รูปภาพ JPG, PNG, SVG ปะปนกันอยู่หรือไม่? นี่คือสคริปต์ที่จะจัดเรียงไฟล์เหล่านี้ไปยังโฟลเดอร์ตามนามสกุลโดยอัตโนมัติ

import os

# --- การเตรียมการ: สร้างไฟล์ทดสอบเพื่อจัดระเบียบ ---
# สร้างไดเรกทอรีทำงานชื่อ "image_sorter"
base_dir = "image_sorter"
os.makedirs(base_dir, exist_ok=True)

# สร้างไฟล์รูปภาพทดสอบ
dummy_files = ["cat.jpg", "dog.png", "logo.svg", "photo.jpg", "icon.png"]
for fname in dummy_files:
    # สร้างพาทอย่างปลอดภัยด้วย os.path.join
    with open(os.path.join(base_dir, fname), "w") as f:
        f.write(f"This is {fname}.")

print(f"เนื้อหาก่อนจัดระเบียบของ {base_dir}: {os.listdir(base_dir)}")
print("-" * 20)
# --- สิ้นสุดการเตรียมการ ---


# --- การประมวลผลหลัก: จัดระเบียบไฟล์ ---
# ระบุไดเรกทอรีเป้าหมาย
target_dir = "image_sorter"

# ดึงไฟล์ทั้งหมดในไดเรกทอรี
for filename in os.listdir(target_dir):
    # สร้างพาทเต็มของไฟล์
    full_path = os.path.join(target_dir, filename)

    # หากไม่ใช่ไฟล์ (เช่น เป็นไดเรกทอรี) ให้ข้ามไป
    if not os.path.isfile(full_path):
        continue

    # ดึงนามสกุลจากชื่อไฟล์ (เช่น ".jpg")
    # os.path.splitext เป็นฟังก์ชันที่มีประโยชน์ในการแยกชื่อไฟล์และนามสกุล
    ext = os.path.splitext(filename)[1] # ดึงส่วนที่สองจาก ("cat", ".jpg")

    # ข้ามไฟล์ที่ไม่มีนามสกุล
    if not ext:
        continue

    # สร้างโฟลเดอร์ด้วยชื่อนามสกุลที่ไม่มี "." (เช่น โฟลเดอร์ "jpg")
    # แปลงนามสกุลเป็นตัวพิมพ์เล็กเพื่อความสอดคล้อง
    folder_name = ext[1:].lower()
    ext_dir = os.path.join(target_dir, folder_name)

    # หากโฟลเดอร์ยังไม่มี ให้สร้างขึ้น
    os.makedirs(ext_dir, exist_ok=True)

    # ย้ายไฟล์ไปยังโฟลเดอร์ใหม่
    new_path = os.path.join(ext_dir, filename)
    os.rename(full_path, new_path)
    print(f"ย้าย {filename} ไปยังโฟลเดอร์ {folder_name} แล้ว")

print("-" * 20)
print(f"เนื้อหาหลังจัดระเบียบของ {base_dir}: {os.listdir(base_dir)}")
print(f"เนื้อหาของโฟลเดอร์ jpg: {os.listdir(os.path.join(base_dir, 'jpg'))}")
print(f"เนื้อหาของโฟลเดอร์ png: {os.listdir(os.path.join(base_dir, 'png'))}")

【คัดลอกและวางได้เลย】โค้ดสำหรับสร้างสภาพแวดล้อมทดสอบบนเดสก์ท็อปโดยอัตโนมัติ

หลังจากอ่านมาถึงตรงนี้ บางท่านอาจสงสัยว่า "อยากลองทำบน PC ของตัวเอง แต่จะรันที่ไหนดี?" ดังนั้น เราได้เตรียมโค้ด Python ที่ "ทำงานได้ทั้งชุด" ซึ่งคุณสามารถคัดลอกและบันทึกเป็นไฟล์ชื่อ `create_test_env.py` แล้วรันได้เลย เพื่อสร้างโฟลเดอร์และไฟล์ทดสอบบนเดสก์ท็อปของ PC ของคุณโดยอัตโนมัติ ลองตรวจสอบเดสก์ท็อปของคุณหลังจากรันดูสิครับ!

(※โค้ดนี้จะสร้างโฟลเดอร์ชื่อ `python_os_test` บนเดสก์ท็อปของคุณ โปรดลบโฟลเดอร์นี้ทิ้งเมื่อไม่ต้องการใช้แล้ว)

<!DOCTYPE html>
<html lang="th">
<head>
    <meta charset="UTF-8">
    <title>ตัวอย่างโค้ดโมดูล os ของ Python</title>
    <style>
        body { background-color: #202124; color: #e8eaed; font-family: sans-serif; }
        pre { background-color: #282c34; color: #abb2bf; padding: 1em; border-radius: 5px; overflow-x: auto; }
        code { font-family: 'Courier New', Courier, monospace; }
        h1 { color: #669df6; }
        p { line-height: 1.6; }
    </style>
</head>
<body>
    <h1>โค้ด Python: สร้างสภาพแวดล้อมทดสอบบนเดสก์ท็อปโดยอัตโนมัติ</h1>
    <p>คัดลอกโค้ด Python ด้านล่าง บันทึกเป็นชื่อ `create_test_env.py` และรัน `python create_test_env.py` จากเทอร์มินัลหรือคอมมานด์พรอมต์ของคุณ</p>
<pre><code>
import os
import sys

def create_test_environment():
    """
    ฟังก์ชันสำหรับสร้างไดเรกทอรีและไฟล์ทดสอบบนเดสก์ท็อป
    """
    try:
        # 1. ดึงพาทของเดสก์ท็อป
        # os.path.expanduser('~') ใช้ดึงไดเรกทอรี home
        desktop_path = os.path.join(os.path.expanduser('~'), 'Desktop')

        # สำหรับสภาพแวดล้อม OS ที่ไม่มีเดสก์ท็อป (เช่น เซิร์ฟเวอร์ CUI) ให้ใช้ไดเรกทอรีปัจจุบัน
        if not os.path.exists(desktop_path):
            desktop_path = os.getcwd()
            print(f"ไม่พบเดสก์ท็อป จะสร้างในไดเรกทอรีปัจจุบัน: {desktop_path}")

        # 2. สร้างโฟลเดอร์ทดสอบหลัก
        main_test_dir = os.path.join(desktop_path, "python_os_test")
        os.makedirs(main_test_dir, exist_ok=True)
        print(f"สร้างโฟลเดอร์หลักแล้ว: {main_test_dir}")

        # 3. สร้างโฟลเดอร์ย่อย
        sub_dirs = ["documents", "images", "archives"]
        for sub_dir in sub_dirs:
            os.makedirs(os.path.join(main_test_dir, sub_dir), exist_ok=True)

        print(f"สร้างโฟลเดอร์ย่อยแล้ว: {sub_dirs}")

        # 4. สร้างไฟล์ทดสอบ
        files_to_create = {
            "documents": ["report.txt", "memo.md"],
            "images": ["cat.jpg", "dog.png"],
            "": ["readme.txt"] # ใต้โฟลเดอร์หลักโดยตรง
        }

        for directory, filenames in files_to_create.items():
            for filename in filenames:
                file_path = os.path.join(main_test_dir, directory, filename)
                with open(file_path, "w", encoding="utf-8") as f:
                    f.write(f"นี่คือเนื้อหาทดสอบสำหรับ {filename}")

        print("สร้างไฟล์ทดสอบแล้ว")
        print("\n")
        print("🎉 ตั้งค่าเสร็จเรียบร้อย!")
        print(f"โปรดตรวจสอบไดเรกทอรี {main_test_dir}")

    except OSError as e:
        print(f"เกิดข้อผิดพลาด: {e}", file=sys.stderr)
        print("อาจเป็นปัญหาเกี่ยวกับสิทธิ์การเข้าถึงหรือพาท", file=sys.stderr)
    except Exception as e:
        print(f"เกิดข้อผิดพลาดที่ไม่คาดคิด: {e}", file=sys.stderr)

if __name__ == "__main__":
    create_test_environment()
</code></pre>
</body>
</html>

3 ข้อควรระวัง

โมดูล os มีประสิทธิภาพสูง แต่เนื่องจากเป็นการจัดการระบบไฟล์โดยตรง จึงมีข้อควรระวังบางประการ การทราบสิ่งเหล่านี้จะช่วยป้องกันข้อผิดพลาดได้มากมาย

  1. การระบุพาทผิดพลาด
    ข้อผิดพลาด "No such file or directory" (FileNotFoundError) ส่วนใหญ่เกิดจากการระบุพาทที่ผิดพลาด ควรสร้างนิสัยในการตรวจสอบตำแหน่งปัจจุบันด้วย `os.getcwd()` และตรวจสอบการมีอยู่ของเป้าหมายล่วงหน้าด้วย `os.path.exists()`
  2. อย่าละเลยการจัดการข้อผิดพลาด
    การพยายามสร้างไดเรกทอรีที่มีอยู่แล้วด้วย `os.mkdir()` หรือลบไฟล์ที่ไม่มีอยู่ด้วย `os.remove()` จะทำให้โปรแกรมหยุดทำงานเนื่องจากข้อผิดพลาด การเขียนโค้ดเพื่อจัดการกับข้อผิดพลาดที่อาจเกิดขึ้นโดยใช้การตรวจสอบล่วงหน้าด้วย `os.path.exists()` หรือบล็อก `try...except` จะทำให้โปรแกรมมีความเสถียรมากขึ้น
  3. การทำงานที่ไม่สามารถย้อนกลับได้
    การทำงานเช่น `os.remove()` และ `os.rename()` โดยทั่วไปแล้วไม่สามารถ "ย้อนกลับ" ได้ และไม่ได้ผ่านถังขยะของ PC ด้วย โดยเฉพาะอย่างยิ่งเมื่อจัดการกับไฟล์สำคัญ การเพิ่มขั้นตอนขั้นกลาง เช่น การย้ายไปยังโฟลเดอร์สำรองข้อมูลก่อน แทนที่จะลบโดยตรง จะปลอดภัยกว่า

สะดวกยิ่งขึ้น! แนะนำโมดูลที่เกี่ยวข้อง

โมดูล os เป็นพื้นฐาน แต่ก็มีไลบรารีที่ทันสมัยและสะดวกกว่าอยู่ด้วย ในฐานะก้าวต่อไป การรู้จักไลบรารีเหล่านี้ไว้ก็เป็นสิ่งที่ดี

pathlib - การจัดการพาทที่ทันสมัยและใช้งานง่าย

`pathlib` ซึ่งถูกเพิ่มเข้ามาในไลบรารีมาตรฐานตั้งแต่ Python 3.4 เป็นโมดูลที่ช่วยให้คุณสามารถจัดการกับพาทในฐานะอ็อบเจกต์ได้อย่างง่ายดาย เนื่องจากเป็นอ็อบเจกต์ไม่ใช่สตริง คุณจึงสามารถเขียนโค้ดแบบลูกโซ่ (method chaining) หรือรวมพาทด้วยตัวดำเนินการ `/` ได้ ทำให้โค้ดดูสะอาดตาขึ้น

from pathlib import Path

# ดึงไดเรกทอรีปัจจุบันเป็นอ็อบเจกต์ Path
p = Path('.')

# การสร้างไดเรกทอรีด้วย pathlib
new_dir = p / "pathlib_test" # สามารถรวมพาทด้วยตัวดำเนินการ / ได้!
new_dir.mkdir(exist_ok=True) # เรียกใช้เป็นเมธอด

# การแสดงรายชื่อไฟล์ก็ง่าย
for item in p.iterdir():
    print(f"{'ไดเรกทอรี' if item.is_dir() else 'ไฟล์'}: {item.name}")

shutil - การจัดการไฟล์ระดับสูง

`shutil` (shell utilities) ให้บริการการจัดการไฟล์ในระดับที่สูงกว่าโมดูล os ตัวอย่างเช่น การคัดลอกหรือลบไดเรกทอรีที่มีเนื้อหาอยู่ภายใน ซึ่งในโมดูล os คุณจะต้องเขียนฟังก์ชันเรียกซ้ำด้วยตัวเอง แต่ด้วย `shutil` คุณสามารถทำได้ในบรรทัดเดียว

import shutil
import os

# --- การเตรียมการ ---
os.makedirs("source_dir/sub_dir", exist_ok=True)
with open("source_dir/sub_dir/data.txt", "w") as f:
    f.write("important data")

# --- ตัวอย่างการใช้ shutil ---

# คัดลอกไดเรกทอรีทั้งชุด
if os.path.exists("source_dir"):
    shutil.copytree("source_dir", "backup_dir")
    print("คัดลอก source_dir ไปยัง backup_dir แล้ว")

# ลบไดเรกทอรีพร้อมเนื้อหา
if os.path.exists("backup_dir"):
    shutil.rmtree("backup_dir")
    print("ลบ backup_dir พร้อมเนื้อหาแล้ว")

# ลบ source_dir ที่ไม่จำเป็นแล้ว
shutil.rmtree("source_dir")

สรุป

ในครั้งนี้ เราได้แนะนำเกี่ยวกับการจัดการไฟล์และไดเรกทอรีโดยใช้โมดูล os ของ Python ตั้งแต่พื้นฐานการใช้งานไปจนถึงตัวอย่างการประยุกต์ใช้ ในเบื้องหลังของการสร้างเว็บไซต์ มีการจัดการไฟล์ที่ต้องใช้ความพยายามเช่นนี้เกิดขึ้นมากมาย หากคุณสามารถใช้โมดูล os ได้อย่างคล่องแคล่ว คุณจะสามารถทำงานที่น่าเบื่อหน่ายให้เป็นอัตโนมัติ และมีสมาธิกับงานสร้างสรรค์ได้มากขึ้น

ก่อนอื่น ลองคัดลอกและวางโค้ดในบทความนี้เพื่อสัมผัสกับความรู้สึกว่า "ไฟล์เคลื่อนไหวได้ด้วยโปรแกรม!" จากนั้น ลองท้าทายตัวเองด้วยการปรับแต่งให้เข้ากับงานของคุณดูนะครับ!

ก้าวต่อไป

หลังจากการจัดการไฟล์แล้ว ทำไมไม่ลองสำรวจโลกแห่งการคำนวณตัวเลขดูล่ะ? ด้วยโมดูล math ของ Python คุณสามารถทำการคำนวณทางคณิตศาสตร์ต่างๆ เช่น ฟังก์ชันตรีโกณมิติและลอการิทึมได้อย่างง่ายดาย

➡️ ใช้งานฟังก์ชันทางคณิตศาสตร์ให้เชี่ยวชาญด้วยโมดูล math