บทที่ 7: การจัดการไฟล์ (File Handling)

7.2 ตัวอย่างการจัดการไฟล์ง่าย ๆ เช่น การอ่านไฟล์ข้อมูลและเก็บข้อมูลใน Lists

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

1. การอ่านข้อมูลจากไฟล์และเก็บในลิสต์

เราสามารถอ่านข้อมูลจากไฟล์และเก็บแต่ละบรรทัดไว้ในลิสต์ได้โดยใช้ฟังก์ชัน readlines() ซึ่งจะอ่านทุกบรรทัดในไฟล์และคืนค่าเป็นลิสต์ของสตริงที่แต่ละตัวแทนข้อมูลในแต่ละบรรทัด

ตัวอย่างการอ่านไฟล์และเก็บข้อมูลในลิสต์

# เปิดไฟล์ในโหมดอ่าน
with open("data.txt", "r") as file:
    # อ่านข้อมูลทุกบรรทัดและเก็บในลิสต์
    data_list = file.readlines()

# พิมพ์ข้อมูลที่เก็บในลิสต์
print(data_list)

อธิบาย: โปรแกรมนี้เปิดไฟล์ data.txt ในโหมดอ่าน (r) และใช้ readlines() เพื่ออ่านข้อมูลทั้งหมดในไฟล์และเก็บในลิสต์ data_list ข้อมูลแต่ละบรรทัดในไฟล์จะกลายเป็นองค์ประกอบหนึ่งในลิสต์

2. การจัดการข้อมูลในลิสต์ที่อ่านจากไฟล์

หลังจากที่ข้อมูลถูกเก็บในลิสต์แล้ว เราสามารถจัดการข้อมูลเหล่านั้น เช่น ลบอักขระพิเศษ, แยกข้อมูลที่เป็นตัวเลข, หรือแปลงข้อมูลเพื่อใช้งานต่อ

ตัวอย่างการจัดการข้อมูลหลังจากอ่านเข้าในลิสต์

สมมติว่าไฟล์ data.txt มีเนื้อหาแบบนี้:

John,25
Alice,30
Bob,22

เราสามารถอ่านข้อมูลและจัดการแต่ละบรรทัดโดยการแยกชื่อและอายุเก็บไว้ในลิสต์ที่จัดการแล้วได้:

# เปิดไฟล์ในโหมดอ่าน
with open("data.txt", "r") as file:
    # อ่านข้อมูลทุกบรรทัดและเก็บในลิสต์
    data_list = file.readlines()

# ลบตัวอักษร newline และแยกข้อมูลชื่อกับอายุเก็บในลิสต์ใหม่
processed_data = []

for line in data_list:
    # ลบอักขระ newline และแยกข้อมูลด้วยเครื่องหมายจุลภาค
    name, age = line.strip().split(',')
    # เพิ่มข้อมูลลงในลิสต์ที่จัดการแล้ว
    processed_data.append((name, int(age)))

# พิมพ์ข้อมูลที่จัดการแล้ว
print(processed_data)

อธิบาย: ในตัวอย่างนี้ เราใช้ strip() เพื่อลบอักขระ newline (\n) ที่ติดมากับแต่ละบรรทัด และใช้ split(',') เพื่อแยกข้อมูลชื่อและอายุ จากนั้นเก็บข้อมูลที่จัดการแล้วเป็น tuple ของชื่อและอายุในลิสต์ processed_data

ผลลัพธ์:

[('John', 25), ('Alice', 30), ('Bob', 22)]

3. การใช้ข้อมูลที่อ่านจากไฟล์ในโปรแกรม

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

ตัวอย่างการประมวลผลข้อมูลที่เก็บในลิสต์

สมมติว่าเราต้องการคำนวณอายุเฉลี่ยของคนที่อยู่ในไฟล์ data.txt เราสามารถทำได้ดังนี้:

# คำนวณอายุเฉลี่ยจากข้อมูลที่เก็บในลิสต์ processed_data
total_age = 0

for person in processed_data:
    total_age += person[1]  # เพิ่มอายุแต่ละคนใน total_age

average_age = total_age / len(processed_data)  # คำนวณค่าเฉลี่ย

print("Average age:", average_age)
อธิบาย: โปรแกรมจะรวมอายุทั้งหมดจากลิสต์ processed_data และคำนวณอายุเฉลี่ยโดยการหารด้วยจำนวนคนในลิสต์

4. การเขียนข้อมูลจากลิสต์กลับไปที่ไฟล์

เราสามารถเขียนข้อมูลที่เก็บในลิสต์กลับไปที่ไฟล์ได้โดยใช้ฟังก์ชัน write() หรือ writelines() ในโหมดเขียน (w) หรือโหมดเพิ่มข้อมูล (a)

ตัวอย่างการเขียนข้อมูลจากลิสต์กลับไปที่ไฟล์

# ข้อมูลที่จะเขียนลงในไฟล์
data_to_write = ["John,25\n", "Alice,30\n", "Bob,22\n"]

# เปิดไฟล์ในโหมดเขียน
with open("output.txt", "w") as file:
    # เขียนข้อมูลลงในไฟล์
    file.writelines(data_to_write)

อธิบาย: ข้อมูลที่เก็บในลิสต์ data_to_write ถูกเขียนลงในไฟล์ output.txt โดยใช้ฟังก์ชัน writelines() ซึ่งจะเขียนข้อมูลทั้งหมดในลิสต์ลงในไฟล์พร้อมกัน

สรุป


การอ่านไฟล์และเก็บข้อมูลในลิสต์เป็นวิธีที่สะดวกในการจัดการข้อมูลที่มาในรูปแบบของข้อความ การใช้ฟังก์ชัน readlines() ทำให้เราสามารถนำข้อมูลจากไฟล์มาจัดการภายในลิสต์ และนำไปประมวลผลต่อได้ตามความต้องการ ไม่ว่าจะเป็นการจัดการข้อมูล การคำนวณ หรือการเขียนข้อมูลกลับไปที่ไฟล์ การเรียนรู้วิธีนี้จะช่วยให้การทำงานกับข้อมูลในไฟล์มีความยืดหยุ่นและง่ายขึ้นมาก