Skip to content

บทที่ 3.4: การจัดการไฟล์และข้อมูล JSON (File I/O & JSON)

เอกสารนี้อธิบายเกี่ยวกับการเปิด อ่าน เขียน และปิดไฟล์ตัวอักษร การใช้งาน Context Manager (with statement) การประมวลผลข้อมูลโครงสร้าง JSON และการจัดการเส้นทางไฟล์ด้วยโมดูล pathlib


1. การเปิดและอ่านไฟล์ตัวอักษร (Reading Text Files)

การจัดการไฟล์ในภาษา Python ควรใช้งานร่วมกับคำสั่ง with (Context Manager) เสมอ เพื่อให้ระบบทำการปิดไฟล์ให้อัตโนมัติหลังจากประมวลผลเสร็จ แม้ว่าจะเกิดข้อผิดพลาดระหว่างการทำงานก็ตาม

1.1 โหมดในการเปิดไฟล์ (File Modes)

  • 'r': อ่านไฟล์อย่างเดียว (Default) - ไฟล์ต้องมีอยู่จริง
  • 'w': เขียนไฟล์ (หากมีไฟล์เดิมจะถูกเขียนทับทั้งหมด)
  • 'a': เขียนต่อท้ายไฟล์ (Append)
  • 'b': ทำงานกับไฟล์ไบนารี (เช่น รูปภาพ, ไฟล์ PDF)
  • '+': เปิดไฟล์ทั้งอ่านและเขียน

1.2 วิธีการอ่านข้อมูลจากไฟล์

# ระบุ encoding='utf-8' ทุกครั้งเพื่อรองรับภาษาไทย
with open("data.txt", "r", encoding="utf-8") as file:
    # 1. อ่านเนื้อหาทั้งหมดออกมาเป็น String เดียว
    content = file.read()

    # 2. อ่านทีละบรรทัด (ใช้กรณีไฟล์มีขนาดใหญ่)
    # for line in file:
    #     print(line.strip())

    # 3. อ่านทุกบรรทัดออกมาเป็น List
    # lines = file.readlines()

2. การเขียนข้อมูลลงไฟล์ (Writing Text Files)

# การเขียนทับข้อมูลเดิม ('w')
with open("output.txt", "w", encoding="utf-8") as file:
    file.write("บรรทัดที่ 1\n")
    file.write("บรรทัดที่ 2\n")

# การเขียนข้อมูลต่อท้าย ('a')
with open("output.txt", "a", encoding="utf-8") as file:
    file.write("บรรทัดใหม่ที่เพิ่มเข้ามา\n")

3. การจัดการข้อมูล JSON (Working with JSON)

JSON (JavaScript Object Notation) เป็นรูปแบบโครงสร้างข้อมูลมาตรฐานที่นิยมใช้ในการแลกเปลี่ยนข้อมูล โดย Python มีโมดูล json สำหรับแปลงข้อมูลระหว่าง Python Object (Dict/List) กับ JSON String/File

3.1 ตารางเปรียบเทียบฟังก์ชันในโมดูล json

การทำงาน แปลงระหว่าง Object กับ String แปลงระหว่าง Object กับ File
Python Object -> JSON json.dumps() json.dump()
JSON -> Python Object json.loads() json.load()

3.2 การแปลง Python Object เป็น JSON (dumps / dump)

import json

user_data = {
    "id": 1,
    "name": "สมชาย",
    "is_active": True,
    "skills": ["Python", "SQL"]
}

# 1. แปลงเป็น JSON String (dumps)
# ensure_ascii=False เพื่อแสดงผลภาษาไทยถูกต้อง
json_string = json.dumps(user_data, indent=4, ensure_ascii=False)
print(json_string)

# 2. บันทึกลงไฟล์ JSON โดยตรง (dump)
with open("user.json", "w", encoding="utf-8") as file:
    json.dump(user_data, file, indent=4, ensure_ascii=False)

3.3 การอ่าน JSON มาเป็น Python Object (loads / load)

import json

# 1. แปลงจาก JSON String มาเป็น Dict (loads)
raw_json = '{"name": "Alex", "age": 25}'
parsed_dict = json.loads(raw_json)
print(parsed_dict["name"])  # Output: Alex

# 2. อ่านจากไฟล์ JSON เข้ามาเป็น Dict โดยตรง (load)
with open("user.json", "r", encoding="utf-8") as file:
    data = json.load(file)
    print(data["name"])     # Output: สมชาย

4. การจัดการเส้นทางไฟล์ด้วย pathlib (Modern Path Handling)

โมดูล pathlib ให้การจัดการเส้นทางไฟล์ (File Paths) ในรูปแบบ Object ซึ่งปลอดภัยและทำงานได้ข้ามระบบปฏิบัติการ (Cross-platform)

from pathlib import Path

# สร้าง Object อ้างอิงโฟลเดอร์หรือไฟล์
base_dir = Path("my_folder")
file_path = base_dir / "sub_folder" / "config.json"  # ใช้เครื่องหมาย / ในการเชื่อม Path

# ตรวจสอบว่าไฟล์หรือโฟลเดอร์มีอยู่จริงหรือไม่
if file_path.exists():
    print("พบไฟล์ข้อมูล")

# อ่านและเขียนไฟล์ได้สั้นลงโดยไม่ต้องเปิด/ปิดด้วย open()
text_file = Path("sample.txt")
text_file.write_text("ข้อความทดสอบ", encoding="utf-8")
print(text_file.read_text(encoding="utf-8"))