วิธีจัดการไฟล์ใน Python
เผยแพร่แล้ว: 2022-03-11ในภาษาการเขียนโปรแกรมใด ๆ การจัดการไฟล์เป็นสิ่งสำคัญ และ Python ยังรองรับการทำงานกับไฟล์ในโหมดต่างๆ เช่น การอ่านและการเขียนไปยังไฟล์ และอื่นๆ
เมื่อสิ้นสุดบทช่วยสอนนี้ คุณจะสามารถ:
- เปิดและอ่านไฟล์ใน Python
- อ่านบรรทัดจากไฟล์ข้อความ
- เขียนและต่อท้ายไฟล์และ
- ใช้ตัวจัดการบริบทเพื่อทำงานกับไฟล์ใน Python
วิธีอ่านไฟล์ใน Python
ในการเปิดไฟล์ใน Python คุณสามารถใช้รูปแบบทั่วไป: open('file_name','mode')
- ที่นี่
file_name
คือชื่อของไฟล์
หมายเหตุ: หากไฟล์ที่คุณต้องการเปิดอยู่ในไดเร็กทอรีการทำงานปัจจุบัน คุณสามารถระบุได้เฉพาะชื่อไฟล์เท่านั้น หากอยู่ในโฟลเดอร์อื่นในสภาพแวดล้อมการทำงานของคุณ คุณควรรวมพาธไปยังไฟล์
-
mode
พารามิเตอร์ระบุโหมดที่คุณต้องการเปิดไฟล์
โหมดเริ่มต้นสำหรับการเปิดไฟล์จะถูก อ่าน —แสดงด้วยตัวอักษร
'r'
อย่างไรก็ตาม แนวทางปฏิบัติที่แนะนำเพื่อระบุโหมดอย่างชัดเจน
ก่อนที่เราจะเริ่ม มาดูไฟล์ lib.txt
ซึ่งเราจะใช้ในตัวอย่างนี้
ดาวน์โหลดไฟล์ข้อความและโค้ดที่ใช้ในบทช่วยสอนนี้จาก repo GitHub นี้

ข้อมูลโค้ดด้านล่างแสดงวิธีเปิดไฟล์ข้อความ 'lib.txt'
ใน Python โดยใช้ฟังก์ชัน open()
และอ่านเนื้อหา
file = open('lib.txt','r') contents = file.read() print(contents) file.close() # Output Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
ในตัวอย่างข้างต้น
- ฟังก์ชัน
open()
ส่งคืนวัตถุไฟล์ และเราเลือกที่จะเรียกมันว่าfile
- ต่อไป เราเรียกเมธอด
read()
ในfile
-
contents
ตัวแปรตอนนี้มีเนื้อหาของไฟล์ และเราพิมพ์ออกมา - สุดท้ายเราปิดไฟล์.
อย่างไรก็ตาม หากคุณลืมปิดไฟล์ อาจทำให้สูญเสียทรัพยากรได้ หากคุณกำลังทำงานกับไฟล์ดังกล่าวจำนวนมาก อาจมีการใช้หน่วยความจำเป็นจำนวนมาก เนื่องจากคุณเปิดหลายไฟล์แต่ยังไม่ได้ปิดเลย
ตอนนี้ มาเรียนรู้วิธีที่ดีกว่าในการเปิดไฟล์โดยใช้ ตัวจัดการบริบท ข้อมูลโค้ดด้านล่างแสดงวิธีใช้งาน
with open('lib.txt','r') as f: contents = f.read() print(contents)
เมื่อใช้ตัวจัดการผู้ติดต่อเพื่อทำงานกับไฟล์ คุณไม่จำเป็นต้องใช้วิธี close()
ไฟล์จะถูกปิดโดยอัตโนมัติหลังจากการดำเนินการ I/O เสร็จสิ้น
วิธีอ่านบรรทัดจากไฟล์ใน Python
ในไฟล์ข้อความตัวอย่าง เรามีเพียงไม่กี่บรรทัด ดังนั้นการอ่านเนื้อหาไฟล์ทั้งหมดในคราวเดียวจึงไม่ใช่ปัญหา

อย่างไรก็ตาม เมื่อคุณต้องการอ่านในไฟล์ขนาดใหญ่ การใช้เมธอด read()
ดังที่แสดงไว้ด้านบน อาจไม่มีประสิทธิภาพมากนัก
อันที่จริง หากไฟล์ข้อความมีขนาดใหญ่มาก หน่วยความจำของคุณอาจหมดในไม่ช้า นั่นเป็นเหตุผลที่คุณอาจต้องการอ่านบรรทัดแบบอ่านอย่างเดียวจากไฟล์ข้อความ และคุณจะได้เรียนรู้วิธีการทำในส่วนนี้
ใช้วิธี readline() ของ Python เพื่ออ่านบรรทัดจากไฟล์
เมธอด readline()
อ่านทีละบรรทัดจากไฟล์
เรียกใช้ข้อมูลโค้ดต่อไปนี้
with open('lib.txt','r') as f: line = f.readline() print(line) line = f.readline() print(line) # Output Hello, there! Here are a few helpful Python libraries:
คุณจะเห็นว่าหลังจากการเรียกเมธอด readline()
ครั้งแรก บรรทัดแรกในไฟล์จะถูกพิมพ์ออกมา และการเรียกครั้งที่สองไปยังเมธอด readline()
จะคืนค่าบรรทัดที่สองในไฟล์
เนื่องจากหลังจากการเรียกเมธอดแรก ตัวชี้ไฟล์จะอยู่ที่จุดเริ่มต้นของบรรทัดที่สอง
ใน Python คุณสามารถใช้เมธอด
tell()
เพื่อรับตำแหน่งปัจจุบันของตัวชี้ไฟล์ และหากต้องการย้ายตัวชี้ไฟล์ไปยังตำแหน่งใดตำแหน่งหนึ่ง คุณสามารถใช้เมธอดseek()
ได้
ในข้อมูลโค้ดด้านล่าง เราใช้ f.seek(0)
หลังจากการเรียกใช้เมธอดครั้งแรก สิ่งนี้จะย้ายตัวชี้ไฟล์ไปที่จุดเริ่มต้นของไฟล์ข้อความ นั่นคือเหตุผลที่บรรทัดแรกในไฟล์ถูกพิมพ์ออกมาทั้งสองครั้ง
with open('lib.txt','r') as f: line = f.readline() print(line) f.seek(0) line = f.readline() print(line) # Output Hello, there! Hello, there!
ใช้วิธี readlines() ของ Python เพื่ออ่านบรรทัดจาก File
มีวิธีการที่เกี่ยวข้องอย่างใกล้ชิดที่เรียกว่า readlines()
เมื่อคุณเรียกใช้ข้อมูลโค้ดต่อไปนี้ คุณจะเห็นว่าเมธอด readlines()
จะส่งคืนรายการบรรทัดทั้งหมดในไฟล์
with open('lib.txt','r') as f: lines = f.readlines() print(lines) # Output ['Hello, there!\n', 'Here are a few helpful Python libraries:\n', '1) NumPy\n', '2) pandas\n', '3) matplotlib\n', '4) seaborn\n', '5) scikit-learn\n', '6) BeautifulSoup\n', '7) Scrapy\n', '8) nltk\n', '9) Bokeh\n', '10) statsmodels\n', '\n']
การใช้ Python's for Loop เพื่ออ่านบรรทัดจากไฟล์
ในการอ่านบรรทัดจากไฟล์ข้อความ คุณสามารถใช้ for
loop ได้

เมื่อคุณมีวัตถุไฟล์แล้ว คุณสามารถใช้ for
loop เพื่อวนซ้ำเนื้อหาของไฟล์ได้ทีละบรรทัดแล้วพิมพ์ออกมาดังที่แสดงด้านล่าง สังเกตว่าเราเข้าถึงได้ครั้งละหนึ่งบรรทัดและไม่อ่านเนื้อหาของไฟล์ทั้งหมดได้อย่างไร
with open('lib.txt','r') as f: for line in f: print(line, end='')
หมายเหตุ : เมื่อใช้ฟังก์ชัน
print()
ของ Python ตัวคั่นเริ่มต้นคืออักขระขึ้นบรรทัดใหม่'\n'
แต่ในไฟล์ต้นฉบับ เราไม่มีบรรทัดใหม่เหล่านี้ ดังนั้นให้ตั้งค่าอาร์กิวเมนต์ตัวคั่นเป็นสตริงว่าง:end = ''
เพื่อพิมพ์เนื้อหาของไฟล์ตามที่เป็นอยู่
วิธีอ่านเนื้อหาบางส่วนจากไฟล์ใน Python
ใน Python คุณยังสามารถเลือกที่จะอ่านเนื้อหาของไฟล์ในรูปแบบชิ้นเล็ก ๆ
อ่านรหัสด้านล่าง:
- ที่นี่เราตั้งค่า
chunk_size
เป็น50
ซึ่งหมายความว่าจะมีการอ่านอักขระ 50 ตัวแรกในไฟล์ และเราจะพิมพ์ออกมาด้วย
- ตอนนี้เรียกเมธอด
tell()
บนวัตถุไฟล์f
คุณจะเห็นว่าตัวชี้ไฟล์อยู่ที่ตำแหน่ง 51 ซึ่งเป็นไปตามที่คาดไว้
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk) current = f.tell() print(f"Current position of file pointer: {current}") # Output Hello, there! Here are a few helpful Python librar Current position of file pointer: 51
คุณยังสามารถใช้เทคนิคนี้เพื่ออ่านทั้งไฟล์ในแง่ของส่วนเล็กๆ
ข้อมูลโค้ดต่อไปนี้แสดงวิธีที่คุณทำได้
chunk_size = 50 with open('lib.txt','r') as f: chunk = f.read(chunk_size) print(chunk,end='') while(len(chunk)>0): chunk = f.read(chunk_size) print(chunk,end='') # Output Hello, there! Here are a few helpful Python libraries: 1) NumPy 2) pandas 3) matplotlib 4) seaborn 5) scikit-learn 6) BeautifulSoup 7) Scrapy 8) nltk 9) Bokeh 10) statsmodels
ที่นี่เราใช้ while
loop เพื่ออ่านเนื้อหาของไฟล์ เราอ่านเนื้อหาของไฟล์เป็นชิ้นขนาด 50 จนกว่าจะถึงจุดสิ้นสุดของไฟล์
วิธีเขียนไปยังไฟล์ใน Python
ในการเขียนไฟล์ข้อความใน Python คุณควรเปิดไฟล์นั้นในโหมดเขียน โดยระบุ 'w'

ข้อมูลโค้ดด้านล่างแสดงวิธีการดำเนินการ
with open('new_file.txt','w') as f: f.write('Hello, Python!')
คุณจะเห็นว่า 'new_file.txt'
ถูกสร้างขึ้นในไดเร็กทอรีการทำงานของคุณ
ตอนนี้ เรียกใช้เซลล์โค้ดด้านบนอีกครั้ง
ในเทอร์มินัลของคุณให้รันคำสั่งต่อไปนี้:
cat new_file.txt # Output: Hello, Python!
เป็นการดีที่เราได้เขียนไปยังไฟล์สองครั้ง Hello, Python!
ควรจะพิมพ์สองครั้งใช่หรือไม่
แต่คุณจะเห็นว่าพิมพ์เพียงครั้งเดียว นั่นก็เพราะว่าเมื่อคุณเปิดไฟล์ในโหมด เขียน ( w
) คุณ จะเขียนทับ เนื้อหาของไฟล์ด้วยเนื้อหาใหม่
หากคุณต้องการ เพิ่ม ไปยังส่วนท้ายของไฟล์โดยไม่เขียนทับเนื้อหาที่มีอยู่ คุณควรเปิดไฟล์ในโหมด ผนวก และคุณจะเห็นวิธีการดำเนินการนี้ในหัวข้อถัดไป
วิธีผนวกไฟล์ใน Python
หากคุณต้องการผนวกเนื้อหาลงในไฟล์โดยไม่ต้องเขียนทับ ให้เปิดในโหมด ผนวก
เมื่อต้องการทำเช่นนี้ ใช้ ` 'a'
— a สำหรับ ต่อท้าย — และระบุโหมดอย่างชัดเจน
ถัดไป เรียกใช้เซลล์รหัสต่อไปนี้สองครั้ง
with open('new_file.txt','a') as f: f.write('Hello, Python!')
สังเกตว่าตอนนี้ข้อความถูกพิมพ์ออกมาสองครั้งในขณะที่เราต่อท้ายไฟล์
cat new_file.txt # Output: Hello, Python!Hello, Python!
บทสรุป
มาสรุปสิ่งที่เราได้ทำไปแล้วกันในบทช่วยสอนนี้กัน
- คุณได้เรียนรู้การทำงานของไฟล์ I/O ทั่วไป เช่น การอ่าน การเขียน และการต่อท้ายไฟล์
- นอกจากนี้ คุณยังได้เรียนรู้วิธีใช้เมธอด find() เพื่อย้ายตัวชี้ไฟล์ไปยังตำแหน่งเฉพาะ และ
- วิธีใช้วิธี tell() เพื่อดึงข้อมูลตำแหน่งปัจจุบันของตัวชี้ไฟล์
ฉันหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์ เมื่อคุณได้เรียนรู้วิธีทำงานกับไฟล์ข้อความใน Python แล้ว ให้เรียนรู้วิธีทำงานกับไฟล์ JSON ใน Python
ที่เกี่ยวข้อง:
ตรวจสอบความยาวของรายการใน Python ใน 3 ขั้นตอน