May 20, 2012

Read And Write File

สำหรับบทความนี้ ผู้เขียนจะสอนการใช้ Python อ่านและเขียนไฟล์ Text (.txt) โดยยกตัวอย่างเช่น


ไฟล์ Sample_File.txt ประกอบไปด้วยข้อมูล 5 แถว โดยแต่ละแถวจะมีชื่่อ ประเทศ และจำนวนเงิน ซึ่งคั่นด้วยช่องว่าง (Space)

เราจะเขียนโปรแกรมอ่านไฟล์นี้มา แล้วประมวลผลไฟล์นี้ให้คนที่อยู่ประเทศในแถบเอเชียมีจำนวนเงินเพิ่มขึ้น 1.5 เท่า แล้วเขียนผลลัพธ์ที่ได้ใส่ในไฟล์ใหม่ที่ชื่อว่า Sample_Result.txt

ก่อนอื่น เราลองมาทำความเข้าใจกับคำสั่งที่เกี่ยวข้องกันก่อน

โดยอย่างแรก เราจะต้องอ่านไฟล์นี้ขึ้นมา ด้วยคำสั่งต่อไปนี้ (สมมติว่าไฟล์ Sample_File.txt เก็บอยู่ใน D:\)
>>>  f = open('D:\Sample_File.txt','r')
จากนั้นก็ทำการอ่านข้อมูลทุกบรรทัดด้วยคำสั่งต่อไปนี้
>>> lines = f.readlines()
โดยสามารถเรียกดูข้อมูลที่อ่านมาได้ ให้ผลลัพธ์เป็นดังนี้
>>> lines
['Smith USA 350\n', 'John USA 250\n', 'Somchai THA 400\n', 'Kashutomo JAP 150\n', 'Ashiba JAP 500']
หากใช้คำสั่ง f.readline() แทน f.readlines() จะเป็นการอ่านข้อมุลทีละบรรทัดเท่านั้น และเมื่อใช้คำสั่งนี้ซ้ำก็จะอ่านข้อมูลในบรรทัดถัดไปแทน เช่น
>>> f = open('D:\Sample_File.txt','r')
>>> line = f.readline()
>>> line
'Smith USA 350\n'
>>> line = f.readline()
>>> line
'John USA 250\n'
สังเกตว่าเมื่ออ่านข้อมูลในแต่ละบรรทัด จะมี character '\n' ซึ่งหมายถึงการขึ้นบรรทัดใหม่ (end of line) ติดมาด้วยเสมอ หากเราต้องการแสดงผลข้อมูลในแต่ละบรรทัดด้วยคำสั่งต่อไปนี้ จะได้ผลลัพธ์เป็น
>>> for line in lines:
         print line

Smith USA 350

John USA 250

Somchai THA 400

Kashutomo JAP 150

Ashiba JAP 500
ซึ่งโปรแกรมจะตีความ '\n' เป็นการขึ้นบรรทัดใหม่ ทำให้ output แสดงออกมาเหมือนขึ้นบรรทัดใหม่ 2 รอบ หากต้องการไม่ให้มีบรรทัดว่างเกิดขึ้น จะต้องใช้คำสั่งต่อไปนี้
>>> for line in lines:
         print line.strip()
    
Smith USA 350
John USA 250
Somchai THA 400
Kashutomo JAP 150
Ashiba JAP 500
คราวนี้เมื่อเรารู้หลักการอ่านไฟล์ง่ายๆแล้ว เราลองมาทำตามโจทย์ตัวอย่างกัน
f = open('D:\Sample_File.txt','r')
lines = f.readlines()
ans = []

for line in lines:
    lis = line.strip().split(' ')
    if lis[1] == 'THA' or lis[1] == 'JAP':
            temp = lis[0] + ' ' + lis[1] + ' ' + str(int(lis[2])*1.5) + '\n'
            ans.append(temp)
    else: ans.append(line)

f = open('D:\Sample_Result.txt','w')
for item in ans:
    f.write(item)

f.close()
จะได้ผลลัพธ์เป็นไฟล์ Sample_Result.txt แบบนี้


เป็นอันจบตัวอย่างการอ่านและเขียนไฟล์โดยใช้ Python แล้วครับ

No comments:

Post a Comment