อ่านไฟล์ใน python อย่างรวดเร็วและมีประสิทธิภาพ

ก่อนหน้านี้นิสัยไม่ดี ชอบเขียนโปรแกรมอ่านไฟล์ประมาณนี้

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 คำ/วินาที :D
ปล. มาเขียนบล็อกไว้เผื่อคนอื่นจะเจอปัญหาโง่ๆ แบบนี้ T_T (หรือไม่เค้าก็คงจะเขียนกันแบบล่างซะส่วนใหญ่ล่ะมั้ง)
ปล2. วิธีอ่านไฟล์แบบล่าง มีปัญหาคือ ถ้าโปรแกรมเราจำเป็นต้องกระโดดไปอ่านข้อความที่บรรทัดนู้นที บรรทัดนี้ทีก็คงจะทำไม่ได้ครับ

Comments (4)

RTSPJanuary 2nd, 2009 at 1:08 am

เข้ามาเพราะอยากรู้ว่า Python เขาอ่านไฟล์กันยังไง พอดีเคยใช้แต่ fopen ว่ะ

[Reply]

nattsterJanuary 2nd, 2009 at 1:30 am

อ่านไฟล์แบบ อันล่าง เท่ดีคับ :D

[Reply]

ch_a_m_pJanuary 2nd, 2009 at 1:38 am

ภาษาแม่งแข็งแกร่งเห้ๆ ^^

[Reply]

zamossJanuary 8th, 2009 at 11:48 pm

เมื่ไร try2hack จะมาหนอ อิอิ

[Reply]

Leave a comment

Your comment