7.2 การอ่านข้อมูลจาก Text file
ในการเขียนโปรแกรม ไฟล์ (File) คือสิ่งที่ใช้สำหรับเก็บข้อมูลบนคอมพิวเตอร์ในหน่วยเก็บข้อมูล คอมพิวเตอร์มีไฟล์หลากหลายประเภทขึ้นอยู่กับวัตถุประสงค์การใช้งานของมัน โดยทั่วไปแล้วไฟล์จะแบ่งออกเป็น 2 รูปแบบคือ Text file และ Binary file โดย Text file จะเก็บไฟล์ในรูปแบบของชุดตัวอักษรหรือข้อความที่มนุษย์สามารถอ่านเข้าใจได้ ในขณะที่ Binary file เก็บข้อมูลในรูปแบบ Binary form สำหรับคอมพิวเตอร์เพื่อทำงาน ในบทนี้ เราจะพูดถึงการทำงานกับไฟล์เบื้องต้นในภาษา Python
หลังจากที่เราได้เรียนรู้เกี่ยวกับฟังก์ชันที่ใช้ในการเปิดไฟล์แล้ว ต่อไปจะเป็นตัวอย่างของการอ่านข้อมูลจากไฟล์ในภาษา Python เราจะเขียนโปรแกรมในการอ่านข้อมูลจาก Text file และนำข้อมูลที่อ่านได้มาแสดงผลทางหน้าจอ นี่เป็นโค้ดของโปรแกรมในการอ่านข้อมูลจาก Text file
f = open('myfile.txt', 'r')
s = f.read()
f.close()
print(s)
ในตัวอย่าง เป็นโปรแกรมในการอ่านข้อมูลจาก Text file ในตอนแรกของโปรแกรม เราได้เปิดไฟล์ด้วยฟังก์ชัน open() โดยอาร์กิวเมนต์แรกเป็นชื่อของไฟล์คือ myfile.txt และเราต้องการเปิดไฟล์เพื่ออ่านจึงใส่โหมดของการเปิดเป็น r หลังจากการเปิดสำเร็จฟังก์ชันส่ง File object กลับในตัวแปร f อย่างไรก็ตาม ถ้าหากการเปิดไฟล์ล้มเหลวจะทำให้เกิดข้อผิดพลาด OSError ขึ้น
f = open('myfile.txt', 'r')
s = f.read()
f.close()
print(s)
s = f.read()
คำสั่งต่อมา เป็นการอ่านข้อมูลจากไฟล์ด้วยเมธอด read() โดยเมธอดนี้จะทำการอ่านข้อมูลทั้งหมดในไฟล์เพียงครั้งเดียว และข้อมูลที่อ่านได้จะเป็น String และเรานำใส่ในตัวแปร s เพื่อนำไปใช้งานต่อไป
f.close()
ในคำสั่งต่อมา เป็นการปิดการทำงานของไฟล์ด้วยเมธอด close() นี่เป็นสิ่งที่สำคัญและคุณควรจะจำไว้เสมอว่า ในการทำงานกับไฟล์ทุกครั้งนั้นจะต้องทำการปิดการทำงานของ File object เสมอ เพื่อให้ไฟล์สามารถใช้ได้กับโปรแกรมอื่นๆ ต่อไป หลังจากนั้นเราแสดงข้อมูลที่อ่านมาได้จากไฟล์
เมื่อรันโปรแกรมจะได้ผลลัพธ์ ดังนี้
This is the content in the file
This is a second line
นี่เป็นรูปแบบของโปรแกรมในการใช้งานคำสั่ง with เพื่อเปิดไฟล์ และเราไม่ต้องปิดไฟล์ด้วยเมธอด close() และนี่จะยืนยันว่าไฟล์จะถูกปิดการทำงานเสมอแม้จะเกิดข้อผิดพลาดขึ้นก็ตาม
with open('myfile.txt', 'r') as f:
s = f.read()
print(s)
เมธอด read() จะทำการอ่านข้อมูลทั้งหมดมาในครั้งเดียว ในภาษา Python นั้นคุณสามารถอ่านข้อมูลจากไฟล์ทีละบรรทัดได้โดยการใช้เมธอด readline() ต่อไปเป็นตัวอย่างของโปรแกรมในการอ่านข้อมูลจาก Text file ทีละบรรทัด โดยการใช้คำสั่ง While loop เพื่อวนอ่านข้อมูลจากไฟล์ นี่เป็นโค้ดการทำงานของโปรแกรม
f = open('myconfig.txt', 'r')
while True:
s = f.readline()
if s == '': # check file end
break
# spliting line to key and value
d = s.rstrip().split('=');
print(d[0] + ': ' + d[1])
f.close()
ในตัวอย่าง เป็นโปรแกรมในการอ่านข้อมูลจากไฟล์ทีละบรรทัดด้วยเมธอด readline() ในตอนแรกเราทำการเปิดไฟล์ myconfig.txt ด้วยโหมดสำหรับการอ่านข้อมูลเช่นเดิม
file myconfig.txt - Notepad
name = twk
domain = num = thoengwit.ac.th
year = 2018
type = tutorial
head_color = blue
นี่เป็นรูปของข้อมูลที่แสดงในไฟล์ myconfig.txt ที่เราจะอ่านโดยโปรแกรมของเรา โดยไฟล์ดังกล่าวเก็บค่าของการตั้งค่าโดยมี Key และ Value และแต่ละค่าจะแบ่งแยกโดยการขึ้นบรรทัดใหม่
while True:
s = f.readline()
if s == '': # check file end
break
while True:
s = f.readline()
if s == '': # check file end
break
หลังจากนั้นโปรแกรมจะทำการวนอ่านไฟล์ด้วยคำสั่ง While loop แต่ละรอบของการทำงานเมธอด readline() จะอ่านข้อมูลจากไฟล์มาทีละบรรทัดโดยรวม \n ด้วย เราได้ใช้คำสั่ง If เพื่อตรวจสอบหากข้อมูลที่อ่านได้เป็นค่า String ว่าง ' ' หมายถึงโปรแกรมได้อ่านไฟล์หมดแล้วและสั่งให้โปรแกรมออกจาก Loop ไป
# spliting line to key and value
d = s.rstrip().split('=');
print(d[0] + ': ' + d[1])
การอ่านข้อมูลในแต่ละรอบนั้นจะอยู่ในตัวแปร s เราได้ทำการตัด New line ออกไปด้วยเมธอด rstrip() และใช้เมธอด split() เพื่อแบ่งเอาค่าของ Key และ Value ของการตั้งค่าที่แบ่งแยกโดยเครื่องหมายเท่ากับ (=) และนำมาแสดงผลโดยจัดรูปแบบการแสดงผลใหม่
เมื่อรันโปรแกรมจะได้ผลลัพธ์ ดังนี้
name = twk
domain = num = thoengwit.ac.th
year = 2018
type = tutorial
head_color = blue