Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การเปิดและปิดไฟล์ (Opening and Closing Files) ใน Python

จนถึงตอนนี้ คุณได้อ่านและเขียนกับ 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