จนถึงตอนนี้ คุณได้อ่านและเขียนกับ standard input และ output แล้ว ตอนนี้เราจะดูวิธีใช้ไฟล์ข้อมูลจริง
Python มีฟังก์ชันและเมธอดพื้นฐานที่จำเป็นในการจัดการไฟล์โดยค่าเริ่มต้น คุณสามารถทำ file manipulation ส่วนใหญ่ได้โดยใช้ file object
ฟังก์ชัน open
ก่อนที่คุณจะอ่านหรือเขียนไฟล์ คุณต้องเปิดมันโดยใช้ฟังก์ชัน open() ในตัวของ Python ฟังก์ชันนี้สร้าง file object ซึ่งจะถูกใช้เพื่อเรียกเมธอดสนับสนุนอื่นๆ ที่เกี่ยวข้องกับมัน
ไวยากรณ์ (Syntax)
file object = open(file_name [, access_mode][, buffering])
รายละเอียดพารามิเตอร์:
- file_name - อาร์กิวเมนต์ file_name เป็นค่าสตริงที่มีชื่อไฟล์ที่คุณต้องการเข้าถึง
- access_mode - access_mode กำหนดโหมดที่ไฟล์ต้องเปิด คือ อ่าน เขียน เพิ่มเติม เป็นต้น รายการค่าที่เป็นไปได้ทั้งหมดกำหนดในตารางด้านล่าง นี่เป็นพารามิเตอร์ทางเลือก และโหมดการเข้าถึงไฟล์เริ่มต้นคือ read (r)
- buffering - ถ้าค่า buffering ตั้งเป็น 0 ไม่มี buffering ถ้าค่า buffering เป็น 1 จะมี line buffering ขณะเข้าถึงไฟล์ ถ้าคุณระบุค่า buffering เป็นจำนวนเต็มมากกว่า 1 buffering จะทำงานด้วย buffer size ที่ระบุ ถ้าติดลบ buffer size จะเป็นค่าเริ่มต้นของระบบ (default behavior)
นี่คือรายการโหมดต่างๆ ของการเปิดไฟล์:
| ลำดับ | โหมดและคำอธิบาย |
|---|---|
| 1 | r เปิดไฟล์เพื่ออ่านอย่างเดียว File pointer วางที่จุดเริ่มต้นของไฟล์ นี่คือโหมดเริ่มต้น |
| 2 | rb เปิดไฟล์เพื่ออ่านอย่างเดียวในรูปแบบไบนารี File pointer วางที่จุดเริ่มต้นของไฟล์ นี่คือโหมดเริ่มต้น |
| 3 | r+ เปิดไฟล์เพื่ออ่านและเขียนทั้งคู่ File pointer วางที่จุดเริ่มต้นของไฟล์ |
| 4 | rb+ เปิดไฟล์เพื่ออ่านและเขียนทั้งคู่ในรูปแบบไบนารี File pointer วางที่จุดเริ่มต้นของไฟล์ |
| 5 | w เปิดไฟล์เพื่อเขียนอย่างเดียว ทับไฟล์ถ้าไฟล์มีอยู่ ถ้าไฟล์ไม่มี สร้างไฟล์ใหม่เพื่อเขียน |
| 6 | wb เปิดไฟล์เพื่อเขียนอย่างเดียวในรูปแบบไบนารี ทับไฟล์ถ้าไฟล์มีอยู่ ถ้าไฟล์ไม่มี สร้างไฟล์ใหม่เพื่อเขียน |
| 7 | w+ เปิดไฟล์เพื่อเขียนและอ่านทั้งคู่ ทับไฟล์ที่มีอยู่ถ้าไฟล์มีอยู่ ถ้าไฟล์ไม่มี สร้างไฟล์ใหม่เพื่ออ่านและเขียน |
| 8 | wb+ เปิดไฟล์เพื่อเขียนและอ่านในรูปแบบไบนารี ทับไฟล์ที่มีอยู่ถ้าไฟล์มีอยู่ ถ้าไฟล์ไม่มี สร้างไฟล์ใหม่เพื่ออ่านและเขียน |
| 9 | a เปิดไฟล์เพื่อเพิ่มเติม (append) File pointer อยู่ที่ท้ายไฟล์ถ้าไฟล์มีอยู่ นั่นคือไฟล์อยู่ในโหมด append ถ้าไฟล์ไม่มี สร้างไฟล์ใหม่เพื่อเขียน |
| 10 | ab เปิดไฟล์เพื่อเพิ่มเติมในรูปแบบไบนารี File pointer อยู่ที่ท้ายไฟล์ถ้าไฟล์มีอยู่ นั่นคือไฟล์อยู่ในโหมด append ถ้าไฟล์ไม่มี สร้างไฟล์ใหม่เพื่อเขียน |
| 11 | a+ เปิดไฟล์เพื่อเพิ่มเติมและอ่านทั้งคู่ File pointer อยู่ที่ท้ายไฟล์ถ้าไฟล์มีอยู่ ไฟล์เปิดในโหมด append ถ้าไฟล์ไม่มี สร้างไฟล์ใหม่เพื่ออ่านและเขียน |
| 12 | ab+ เปิดไฟล์เพื่อเพิ่มเติมและอ่านในรูปแบบไบนารี File pointer อยู่ที่ท้ายไฟล์ถ้าไฟล์มีอยู่ ไฟล์เปิดในโหมด append ถ้าไฟล์ไม่มี สร้างไฟล์ใหม่เพื่ออ่านและเขียน |
แอตทริบิวต์ของ file Object
เมื่อไฟล์ถูกเปิดและคุณมี file object หนึ่ง คุณสามารถรับข้อมูลต่างๆ ที่เกี่ยวข้องกับไฟล์นั้นได้
นี่คือรายการแอตทริบิวต์ทั้งหมดที่เกี่ยวข้องกับ file object:
| ลำดับ | โหมดและคำอธิบาย |
|---|---|
| 1 | file.closed คืนค่า true ถ้าไฟล์ปิด false ถ้าไม่ได้ปิด |
| 2 | file.mode คืนค่า access mode ที่ไฟล์ถูกเปิด |
| 3 | file.name คืนค่าชื่อของไฟล์ |
| 4 | file.softspace คืนค่า false ถ้าต้องการ space อย่างชัดเจนกับ print true ถ้าไม่ใช่ |
ตัวอย่าง
#!/usr/bin/python
# เปิดไฟล์
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
print "Closed or not : ", fo.closed
print "Opening mode : ", fo.mode
print "Softspace flag : ", fo.softspace
ผลลัพธ์ (Output)
ผลลัพธ์ดังนี้:
Name of the file: foo.txt
Closed or not : False
Opening mode : wb
Softspace flag : 0
เมธอด close()
เมธอด close() ของ file object ทำ flush ข้อมูลที่ยังไม่ได้เขียนและปิด file object ซึ่งหลังจากนั้นไม่สามารถเขียนเพิ่มได้
Python ปิดไฟล์อัตโนมัติเมื่อ reference object ของไฟล์ถูกกำหนดให้อ็อบเจ็กต์ไฟล์อื่น การใช้เมธอด close() เพื่อปิดไฟล์เป็น good practice
ไวยากรณ์ (Syntax)
fileObject.close()
ตัวอย่าง
#!/usr/bin/python
# เปิดไฟล์
fo = open("foo.txt", "wb")
print "Name of the file: ", fo.name
# ปิดไฟล์ที่เปิด
fo.close()
ผลลัพธ์ (Output)
ผลลัพธ์ดังนี้:
Name of the file: foo.txt