Python: Split text

14 07 2010

20100714

ในการแยกส่วนของข้อความที่ต้องการออกจากข้อความยาวๆ ในไพธอนสามารถทำได้โดยการใช้คำสั่ง split()
กรณีของผมมีข้อความที่ดึงออกจากส่วนหัวไฟล์ของข้อมูลดาวเทียมที่แสดงข้อมูลค่าพิกัดมุมภาพ ดังนี้

1 (1.00P,1.00L) -> (99.0234169E,18.9521500N,0.00)
ข้อมูลนี้มาในรูป text จากข้อความดังกล่าวจะเห็นได้ว่าข้อความถูกแยกกันด้วย ช่องว่าง[space] ดังนั้นเราจึงตัดข้อความเป็นส่วนๆด้วยคำสั่ง split()แล้วเก็บไว้ในตัวแปร

>> text = ‘1 (1.00P,1.00L) -> (99.0234169E,18.9521500N,0.00)’
>> q = text.split(‘ ‘)
>> print q

จะได้
>> [‘1’, ‘(1.00P,1.00L)’, ‘->’, ‘(99.0234169E,18.9521500N,0.00)’]
สามารถเรียกข้อมูลได้ละเอียดขึ้น หรือเฉพาะเจาะจงเป็นส่วนๆ ก็ได้เพราะข้อมูลทั้งหมดถูกจัดเก็บไว้แบบ List แล้ว
>> print q[1]
(1.00P,1.00L)
>> print q[3]
(99.0234169E,18.9521500N,0.00)

เจาะลึกเข้าไปอีก
>> print q[1][1]
1
>> print q[1][5]
P
>> print q[1][-2]
L
>> print q[1][1:6]
1.00P
>> print q[1][1:-1]
1.00P,1.00L
>> print q[1][-6:-1]
1.00L

เจาะมาแล้วยังเจาะได้อีก

>> print q[1][-6:-1][-1]
L

ยอดไปเลย งั้นขยายผลต่อเอาพิกัดภาพ 1.00P,1.00L ไปไว้ในตัวแปร imp

>> imp = q[1][1:-1].split(‘,’)
>> print imp
[‘1.00P’, ‘1.00L’]
>> print imp[0]
‘1.00P’

ทำให้เป็นตัวเลขค่าพิกัดเลยดีกว่า

>> impoint =  float(imp[0][0:-1]),float(imp[1][0:-1])
>> print impoint
(1.0, 1.0)

เป็นตัวเลขแล้ว โดยที่ impoint[0] = 1.0 และ impoint[1] = 1.0 เอาไปใช้งานได้

ดังนั้นจากข้อมูลด้านบน นำไปจัดเก็บในตัวแปร pix, lin,lat,lon สามารถทำได้ดังนี้

>>text = ‘1 (1.00P,1.00L) -> (99.0234169E,18.9521500N,0.00)’
>>q = text.split(‘ ‘)
>>imp = q[1][1:-1].split(‘,’)
>>pix,lin =  float(imp[0][0:-1]),float(imp[1][0:-1])
>>llh=q[3][1:-1].split(‘,’)
>>lat,lon =  float(llh[0][0:-1]),float(llh[1][0:-1])
>>print pix,lin,lat,lon
1 1 99.0234169 18.9521500


Actions

Information

3 responses

17 07 2010
Phisan Santitamnont

fixed format ใช่มั้ยครับ ? ถ้าใช่นี่เลยครับ

######## 1 2 3 4 5
########012345678901234567890123456789012345678901234567890
text = ‘1 (1.00P,1.00L) -> (99.0234169E,18.9521500N,0.00)’

pix,lin,lat,lon = float(text[3:7]),float(text[9:13]), \
float(text[20:30]),float(text[32:42])

print pix,lin,lat,lon

Aj.Phisan

17 07 2010
Phisan Santitamnont

ขอแก้ตัวครับ สลับ lat กับ lon ตามนี้ครับ
######## 1 2 3 4 5
########012345678901234567890123456789012345678901234567890
text = ‘1 (1.00P,1.00L) -> (99.0234169E,18.9521500N,0.00)’

pix,lin,lat,lon = float(text[3:7]),float(text[9:13]), \
float(text[20:30]),float(text[32:42])

print pix,lin,lon,lat

19 07 2010
enumap

ใช่แล้วครับถ้าเป็น fix format แบบนี้เลย ขอบคุณครับ
แต่เนื่องจากผมไม่แน่ใจเรื่องจำนวนทศนิยมกับค่าว่ามัน fix format หรือไม่
กลัวว่าถ้าใช้วิธีนี้แล้วถ้าจำนวนถ้าทศนิยมมันเปลี่ยนไป จะทำให้ได้ค่ามาไม่ถูกหนะครับ
เลยลองหาวิธีอื่นดู

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: