Python การอ่านไฟล์

การอ่านไฟล์ใน Python สามารถทำได้หลายวิธี โดยใช้ฟังก์ชันที่มีอยู่ในไลบรารีมาตรฐานของ Python อย่างเช่นฟังก์ชัน open() ต่อไปนี้เป็นตัวอย่างของการอ่านไฟล์ในรูปแบบต่าง ๆ และการประยุกต์ใช้งาน

การอ่านไฟล์ทั้งหมดในครั้งเดียว (read())

การใช้ฟังก์ชัน read() จะทำการอ่านไฟล์ทั้งหมดและคืนค่าเป็นสตริง สามารถใช้ในกรณีที่ไฟล์มีขนาดไม่ใหญ่มาก

Python
# ตัวอย่างการอ่านไฟล์ทั้งหมดในครั้งเดียว
with open("example.txt", "r", encoding="utf-8") as file:
    content = file.read()
    print(content)
  • open("example.txt", "r"): เปิดไฟล์ในโหมดอ่าน (r) และใช้ with เพื่อให้ระบบปิดไฟล์ให้อัตโนมัติเมื่อเสร็จสิ้น
  • file.read(): อ่านข้อมูลทั้งหมดจากไฟล์
  • ข้อดีของวิธีนี้คือ อ่านง่าย แต่ไม่เหมาะกับไฟล์ขนาดใหญ่เพราะจะใช้หน่วยความจำเยอะ

การอ่านทีละบรรทัด (readline())

ในบางกรณี เราอาจต้องการอ่านไฟล์ทีละบรรทัด วิธีนี้เหมาะสำหรับการประมวลผลข้อมูลทีละบรรทัด

Python
# ตัวอย่างการอ่านไฟล์ทีละบรรทัด
with open("example.txt", "r", encoding="utf-8") as file:
    line = file.readline()
    while line:
        print(line.strip())  # strip() เพื่อลบช่องว่างหรือ newline ออก
        line = file.readline()

file.readline(): อ่านไฟล์ทีละบรรทัดและคืนค่าบรรทัดที่อ่าน หากถึงจุดสิ้นสุดของไฟล์ จะคืนค่าเป็นสตริงว่าง

การอ่านไฟล์ทั้งหมดเป็นลิสต์ของบรรทัด (readlines())

การใช้ readlines() จะทำการอ่านไฟล์ทั้งหมดและคืนค่าเป็นลิสต์ที่แต่ละบรรทัดของไฟล์เป็นองค์ประกอบของลิสต์

Python
# ตัวอย่างการอ่านไฟล์เป็นลิสต์
with open("example.txt", "r", encoding="utf-8") as file:
    lines = file.readlines()
    for line in lines:
        print(line.strip())
  • ข้อดี: ง่ายต่อการนำไปประมวลผลแบบเป็นรายการ (list)
  • ข้อเสีย: เหมือนกับ read() ในกรณีที่ไฟล์มีขนาดใหญ่จะกินหน่วยความจำมาก

การอ่านไฟล์แบบไบนารี (rb)

การอ่านไฟล์ไบนารี เช่น รูปภาพ หรือไฟล์ที่ไม่ใช่ข้อความ

Python
# ตัวอย่างการอ่านไฟล์ไบนารี
with open("image.png", "rb") as binary_file:
    binary_content = binary_file.read()
    print(binary_content[:100])  # แสดงไบต์ 100 ตัวแรกของไฟล์
  • rb: เปิดไฟล์ในโหมดไบนารี (r สำหรับอ่าน, b สำหรับไบนารี)
  • การอ่านไฟล์ไบนารีเหมาะสำหรับไฟล์เช่นภาพ, วิดีโอ, ไฟล์เสียง ฯลฯ

การอ่านไฟล์ขนาดใหญ่ทีละบล็อก

เมื่อเราต้องการจัดการไฟล์ขนาดใหญ่ เราสามารถอ่านไฟล์ทีละบล็อกเพื่อประหยัดหน่วยความจำ

Python
# ตัวอย่างการอ่านไฟล์ทีละบล็อก
with open("large_file.txt", "r", encoding="utf-8") as file:
    while True:
        chunk = file.read(1024)  # อ่านทีละ 1024 ไบต์ (หรือ 1 KB)
        if not chunk:
            break
        print(chunk)

การอ่านทีละบล็อกช่วยลดการใช้หน่วยความจำในกรณีไฟล์ขนาดใหญ่

การใช้ Path จากไลบรารี pathlib

Python เวอร์ชันใหม่ ๆ สนับสนุนการใช้ pathlib.Path เพื่ออ่านไฟล์ได้ง่ายขึ้น

Python
from pathlib import Path

# ตัวอย่างการใช้ pathlib
file_path = Path("example.txt")
content = file_path.read_text(encoding="utf-8")
print(content)
  • read_text(): อ่านไฟล์ในรูปแบบของข้อความ
  • นอกจากนี้ pathlib ยังช่วยในการจัดการเส้นทางไฟล์ได้อย่างมีประสิทธิภาพ

การใช้ csv สำหรับการอ่านไฟล์ CSV

หากเราต้องการอ่านไฟล์ CSV เราสามารถใช้ไลบรารี csv

Python
import csv

# ตัวอย่างการอ่านไฟล์ CSV
with open("data.csv", "r", encoding="utf-8") as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:
        print(row)

csv.reader(): ใช้สำหรับอ่านไฟล์ CSV โดยข้อมูลในแต่ละบรรทัดจะถูกแยกเป็นรายการตามคอลัมน์

สรุป

การอ่านไฟล์ใน Python มีหลายรูปแบบ ขึ้นอยู่กับประเภทไฟล์และวัตถุประสงค์ในการใช้งาน:

  • read(): อ่านทั้งหมดในครั้งเดียว
  • readline(): อ่านทีละบรรทัด
  • readlines(): อ่านทั้งหมดและจัดเก็บในลิสต์
  • rb: อ่านไฟล์ในรูปแบบไบนารี
  • อ่านทีละบล็อก: สำหรับไฟล์ขนาดใหญ่
  • ใช้ pathlib: เพื่อจัดการไฟล์ได้สะดวก
  • ใช้ csv: สำหรับการจัดการไฟล์ CSV
แชร์เรื่องนี้