ก่อนหน้านี้นิสัยไม่ดี ชอบเขียนโปรแกรมอ่านไฟล์ประมาณนี้
lines = open('file.txt', 'r').read().split('n') for line in lines: # do something |
คำสั่ง read() แบบไม่กำหนด parameter จะอ่านไฟล์ทั้งหมดเข้ามาไว้ในหน่วยความจำ ถ้าไฟล์มีขนาดเล็ก ก็คงไม่มีปัญหาอะไร แต่เมื่อคืนเขียนโปรแกรมตัดคำไฟล์ใหญ่ประมาณ 64mb ปรากฏว่าโปรแกรมทำงานช้าลงมาก (จากไฟล์เล็กๆ ~7000 คำ/วินาที พอเจอไฟล์ใหญ่ๆเหลือ ~700 คำ/วินาที)
พออ่าน Python Doc แล้วเปลี่ยนวิธีเขียนโปรแกรมอ่านไฟล์เป็นแบบนี้แทน (ซึ่งมีประสิทธิภาพมากกว่า เพราะค่อยๆ อ่านทีละบรรทัด)
f = open('file.txt', 'r') for line in f: # do something f.close() |
ปรากฏว่า ไฟล์จะใหญ่แค่ไหน โปรแกรมก็ทำงานที่ความเร็ว ~7000 คำ/วินาที ![]()
ปล. มาเขียนบล็อกไว้เผื่อคนอื่นจะเจอปัญหาโง่ๆ แบบนี้ T_T (หรือไม่เค้าก็คงจะเขียนกันแบบล่างซะส่วนใหญ่ล่ะมั้ง)
ปล2. วิธีอ่านไฟล์แบบล่าง มีปัญหาคือ ถ้าโปรแกรมเราจำเป็นต้องกระโดดไปอ่านข้อความที่บรรทัดนู้นที บรรทัดนี้ทีก็คงจะทำไม่ได้ครับ