บทที่ 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"))