วิธีจัดการไฟล์ใน 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

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

python-read-file

อย่างไรก็ตาม เมื่อคุณต้องการอ่านในไฟล์ขนาดใหญ่ การใช้เมธอด 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'

python-write-to-file

ข้อมูลโค้ดด้านล่างแสดงวิธีการดำเนินการ

 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 ขั้นตอน