The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.

บทที่ 4 การเขียนโปรแกรมเพื่อจัดการกับข้อมูลอย่างง่าย

Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by chaowalert, 2019-12-18 01:46:28

บทที่ 4 การเขียนโปรแกรมเพื่อจัดการกับข้อมูลอย่างง่าย

บทที่ 4 การเขียนโปรแกรมเพื่อจัดการกับข้อมูลอย่างง่าย

LESSON การเขียนโปรแกรม
เพื่อจดั การขอ้ มลู อยา่ งง่าย
4

การจัดการเร่ืองแฟม้ ในทกุ ๆ โปรแกรม มกี ระบวนการเบื้องต้น ไดแ้ ก่ เปดิ แฟ้ม บันทึกแฟ้ม ซึ่งโปรแกรม
ประยกุ ต์ที่สนบั สนนุ การใชง้ านจะต้องเขียนโปรแกรมให้ผใู้ ช้ ใชง้ านไดอ้ ย่างสะดวก ใชไ้ ดง้ า่ ย ภาษาไพทอนเปน็
ภาษาระดบั สงู เช่นเดยี วกบั ภาษาอืน่ ๆ ที่มฟี ังก์ชันใหใ้ ช้งานครบถ้วนทุกด้านเกีย่ วกบั การจัดการแฟ้ม ซึ่งในบทนี้
จะได้ใหร้ ายละเอียดในดา้ นการจดั การกับแฟม้ ได้แก่ การเปิด-ปิด การเขียน การอ่าน การลบ การแก้ไข การ
คน้ หาแฟ้ม การบบี อัดและการขยายแฟ้ม รวมท้ังการจดั การสารบบ ได้แก่ การสร้างและการลบสารบบ เปน็ ต้น

การเปิ ดและปิ ดแฟ้ ม

สง่ิ แรกท่ีผ้ใู ช้คอมพวิ เตอร์ค้นุ เคย คือ การเปดิ และปดิ แฟ้ม เมื่อเปดิ โปรแกรมสาเรจ็ รปู ใด ๆ มักจะเห็น
หน้าต่างของโปรแกรมน้นั ต่อจากนน้ั ผู้ใชจ้ ะเริ่มต้นใช้เมนเู พือ่ เปิดแฟ้ม และเลือกแฟ้มท่ีตอ้ งการเปดิ เม่ืออ่าน
หรือกระทาการใด ๆ กับแฟ้มทเ่ี ปดิ ขนึ้ มานัน้ ส่งิ ท่ตี ้องทาเป็นลาดบั สุดท้าย คือ การปดิ แฟ้มน้นั เสยี ก่อน หรอื ปดิ
โปรแกรมประยุกตเ์ หล่านัน้ ไป

การเปดิ แฟ้ม

ภาษาไพทอน มฟี งั ก์ชนั เพ่ือเปิดแฟม้ ดงั นี้

file object = open(file_name [, access_mode][, buffering])

ฟงั กช์ ันนที้ าหน้าทเี่ พ่ือเปิดแฟ้มสาหรับอา่ นและเขยี นแฟม้ โดยมรี ายละเอยี ด อาร์กวิ เมนต์ ดังน้ี
file_name คอื ไฟลท์ ่เี ราต้องการเปดิ
access_mode คอื รูปแบบในการเปิดไฟลด์ รู ายละเอียดในตารางดา้ นล่าง
โหมด รายละเอยี ด
r เปิดแฟ้มทมี่ ีอยูแ่ ล้วเพ่ืออ่านเพียงอย่างเดยี ว
w เปดิ แฟม้ เพ่ือเขียนเพยี งอย่างเดียว ถา้ ยงั ไม่มีไฟลจ์ ะสร้างไฟลใ์ หม่
a เปิดแฟ้มเพ่ือเขยี นข้อมลู ต่อท้ายขอ้ มูลเดิม
r+ เปิดแฟม้ เพ่ืออ่านและเขยี น โดยทข่ี ้อมูลเก่าจะถูกลบ
a+ เปดิ แฟม้ เพ่ืออา่ นและเขยี น โดยทขี่ อ้ มลู เก่ายังมีอยู่
w+ เปิดแฟม้ เพ่ืออ่านและเขียน โดยท่ีขอ้ มลู เกา่ จะถูกลบ ถา้ ยังไม่มีไฟลจ์ ะสรา้ งไฟลใ์ หม่
b เพอ่ื ใชส้ าหรบั การอ่าน หรือเขียน หรือเพ่ิมเติมข้อมูลอยา่ งใดอยา่ งหนึ่ง โดยการเปิด
แฟม้ แบบไบนารโี หมด
U เพื่อใชส้ าหรบั การอ่าน หรือเขียน หรอื เพิ่มเติมข้อมูลอย่างใดอยา่ งหนง่ึ โดยการเปิด
แฟม้ แบบ universal โหมด

buffering กาหนดว่าเราจะใช้ buffer หรือไม่

lesson 4 การเขยี นโปรแกรมเพื่อจดั การกบั ขอ้ มลู อยา่ งงา่ ย 75

ถา้ buffersize เป็น 0 หมายถึง ไม่มกี ารใชบ้ ัฟเฟอร์
ถา้ เป็น 1 หมายถึง เป็นการใช้ line-buffer หรือ
ถ้าใส่จานวนตวั เลขเปน็ บวก หมายถึง กาหนดขนาดหน่วยความจาดว้ ยตนเอง แต่ถ้าไม่ใสค่ า่
อารก์ วิ เมนต์ของบัฟเฟอร์ จะเปน็ ไปตามท่ีโปรแกรมไดก้ าหนดค่าเริ่มต้นเอาไว้

ตัวอยา่ งท่ี 4.1 การเปิดแฟม้ ขอ้ มลู

1 # Open a file
2 fo = open("foo.txt", "wb")
3 print ("Name of the file: ", fo.name)
4 print ("Closed or not : ", fo.closed)
5 print ("Opening mode : ", fo.mode)
ผลลัพธท์ ไ่ี ด้คือ
Name of the file: foo.txt
Closed or not : False
Opening mode : wb

โดยปกติแล้วในการทางานกับไฟลส์ ามารถมีข้อผิดพลาดเกิดข้ึนได้ และนั่นจะทาให้โปรแกรมหยดุ การ
ทางานในทันที ส่งผลให้ File object ไม่ถูกปิดอย่างถูกต้อง ในภาษา Python เราสามารถใช้งานไฟล์กับ
คาสั่ง with เพื่อยืนยันว่า File object จะถูกปิดการใช้งานเสมอไม่ว่าจะเกิดข้อผิดพลาดหรือไม่ก็ตาม มี
รูปแบบการใช้ดงั นี้

with open(filename, mode) as f:
# file operations

ตวั อย่างท่ี 4.2 การเปิดแฟ้มข้อมูลด้วยคาสงั่ with open

1 # Open a file
2 with open(“myfile.txt”, “r”) as f :
3 s = f.read()
4 print(s)

การปิดแฟ้ม

หลงั จากการใชค้ าสั่งการจดั การแฟม้ ใด ๆ กต็ ามจะต้องมีการปดิ แฟม้ ในทุก ๆ ครั้ง โดยการใชเ้ มทอ็ ด
close() เพ่ือการยกเลิกการใช้ทรัพยากรต่าง ๆ ของเครื่องคอมพวิ เตอร์ รูปแบบคาส่งั เพื่อเปดิ ปดิ แฟม้ เปน็ ดังนี้

fileObject.close();

lesson 4 การเขยี นโปรแกรมเพื่อจดั การกบั ขอ้ มลู อยา่ งงา่ ย 76

ตัวอย่างท่ี 4.3 การปดิ แฟม้ ข้อมลู

1 # Open a file
2 fo = open("foo.txt", "wb")
3 print ("Name of the file: ", fo.name)
4 # Close opend file
5 fo.close()
ผลลัพธ์ทไ่ี ดค้ ือ
Name of the file: foo.txt

การอา่ นและเขยี นแฟ้ ม

การอ่านแฟม้

การอ่านจากแฟม้ ทั้งหมด
การเขียนโปรแกรมเพื่อเปดิ แฟม้ แล้วให้อ่านเนือ้ หาของแฟ้มออกมาท้งั หมดตามต้นฉบบั จริงน้ัน นยิ ม
ใชเ้ มท็อด read() แตม่ ีวธิ กี ารหรือมีฟังกช์ ันอน่ื ทสี่ ามารถนาไปใช้แทนได้ ทง้ั น้ีขนึ้ อยู่กับความเรว็ หรอื เทคนิค
การนาไปใช้ ซงึ่ จะแตกตา่ งกัน การอ่านข้อมลู จากแฟ้มน้นั มีวิธกี าร 3 วิธีด้วยกนั ดังนี้

1. การใชเ้ มท็อด read() เมท็อดนี้จะอา่ นเนื้อหาของเอกสารทงั้ แฟม้ ตงั้ แตต่ ้นจนจบท่ตี าแหนง่
EOF (end of file) และจะส่งคา่ ท่เี ปน็ เน้ือหาทง้ั หมดออกมาเปน็ สายอกั ขระ

2. การใช้เมทอ็ ด readlines() เมท็อดนี้จะอา่ นแฟม้ ทง้ั หมดแยกออกมาแตล่ ะบรรทัดในลักษณะ
สายอักขระ จนกระท่งั เจอตาแหน่ง EOF ขอ้ มูลจะเก็บอยู่ในโครงสรา้ งแบบลสิ ต์

3. การใชเ้ มท็อด read(bytes) ซง่ึ มักจะใช้กบั แฟ้มทมี่ ีขนาดใหญ่ เพราะต้องการลดภาระงานใน
การประมวลผล การส่งค่าจะส่งจานวนบรรทัดออกมาเป็นข้อมลู สายอักขระ แต่ถา้ ในบรรทดั แรกมีตาแหนง่
EOF อยู่ จะส่งคา่ null ออกมา
รปู แบบการใช้คาสงั่

fileObject.read([count]);

ตวั อยา่ งท่ี 4.4 การอ่านแฟ้มขอ้ มลู

1 # Read a file
2 fo = open("foo.txt", "r+")
3 str = fo.read(10);
4 print ("Read String is : ", str)
5 # Close opend file
6 fo.close()
ผลลพั ธ์ทไ่ี ด้คือ
Read String is : Python is

lesson 4 การเขยี นโปรแกรมเพื่อจดั การกบั ขอ้ มลู อยา่ งงา่ ย 77

การอ่านแฟม้ แต่ละบรรทดั
การอา่ นจากแฟ้มในแต่ละบรรทดั น้นั จะมปี ระโยชน์สาหรบั การเปดิ แฟม้ จากเวบ็ ไซต์ทผี่ ู้ใชต้ ้องการ
ข่าวสารสนเทศ หรอื กรณอี ื่น ๆ เนือ่ งจากภาษาไพทอนมีมอดลู ด้านนโ้ี ดยตรงจึงทาให้สามารถเรยี กใช้ได้อย่าง
งา่ ยดาย มอดูล linecache ประกอบด้วยเมท็อด getline(filename,lineno) การทางานของคาสัง่
จะกาหนดให้แฟ้มที่อา่ นมาได้ จัดเกบ็ อยู่ในหน่วยความจาก่อน จากนั้นจะนาเอาบรรทดั ในแตล่ ะอารก์ ิวเมนต์มา
แสดงเม่ือเลิกใชค้ าส่ังของมอดูล linecache แล้วจะตอ้ งใช้คาสง่ั เพือ่ คนื หนว่ ยความจาดว้ ยเมทอ็ ด clearcache()

ตัวอยา่ งท่ี 4.5 การอา่ นแฟ้มขอ้ มลู

1 import linecache
2 file="readn.txt"
3 for line in [1,3,5]:
4 print(linecache.getline(file,line))
5 linecache.clearcache()
ผลลพั ธท์ ไี่ ดค้ ือ
AAAAAAAAAAAAAAA
CCCCCCCCCCCCCCC
EEEEEEEEEEEEEEEEE

การเขยี นแฟ้ม

การเขียนข้อมลู ลงในแฟ้ม มีประโยชนใ์ นดา้ นการเขียนปรบั ปรงุ แฟ้มที่มขี ้อมลู อยู่แล้วหรือเป็นแฟม้ ว่าง
เปลา่ เพราะในปัจจุบันสามารถนาไปประยุกต์กับการเขียนโปรแกรมทเ่ี ก่ียวขอ้ งกับฐานข้อมลู ทีบ่ รกิ าร
สาธารณะ เช่น แผนท่ีของ Google เปน็ ตน้ การเขยี นขอ้ มูลลงแฟ้มใชเ้ มท็อด write(string) นอกจากนย้ี ังมี
เมท็อด writelines(sequence) เพ่ือการเขยี นข้อมลู ในแบบลิสต์ลงแฟม้ นอกจากนี้โปรแกรมภาษาไพทอนยังมี
ฟังก์ชนั print >> เพ่อื การเขียนขอ้ มลู ลงไปในแฟ้ม เพ่ือให้ผู้ใชเ้ ลือกใชไ้ ด้อยา่ งสะดวก
รปู แบบการใชค้ าสง่ั

fileObject.write(string);

ตวั อยา่ งท่ี 4.6 การเขียนข้อมูลลงแฟ้ม

1 # Open a file
2 fo = open("foo.txt", "wb")
3 fo.write(“Python is a great language.\nYeah its great!!\n”);
4 # Close opend file
5 fo.close()
ผลลัพธ์ทไี่ ดค้ ือ
Python is a great language.
Yeah its great!!

lesson 4 การเขยี นโปรแกรมเพ่ือจดั การกบั ขอ้ มลู อย่างงา่ ย 78

ตัวอยา่ งที่ 4.7 การเขยี นขอ้ มูลลงแฟม้ และการอา่ นข้อมลู จากแฟ้ม

1 def peopleInfo():
2 txtFile = open("info.txt", "w")
3 i=0
4 for i in range(0, 3):
5 name = input("Enter name ")
6 age = input("Enter age ")
7 hometown = input("Enter hometown ")
8 txtFile.write(name + "\n" + age + "\n" + hometown + "\n")
9 txtFile.close()
10
11 def splitLine():
12 txtFile = open("info.txt", "r")
13 for line in txtFile:
14 line = line.rstrip("\n")
15 print(line)
16
17 peopleInfo()
18 splitLine()
ผลลพั ธ์ทไ่ี ดค้ ือ

การเปล่ียนช่อื แฟ้ม

การเปล่ียนช่ือแฟ้ม ซ่ึงเดิมมีอยู่ในคาสั่งของระบบปฏิบัติการท่ัวไป โดยปกติผู้ใช้จะใช้ explorer เพื่อ
เปลี่ยนชื่อแฟ้ม แต่โปรแกรมภาษาไพทอนได้สร้างมอดูลสนับสนุนการจัดการเกี่ยวกับแฟ้มและสารบบมาใหใ้ ช้
อยู่แล้ว ถ้าหากต้องการนาไปใช้กับโปรแกรมที่พัฒนาขึ้นมาจะทาให้โปรแกรมมีคุณค่าและมีคุณภาพย่ิงข้ึน
มอดูลทีใ่ ช้ ไดแ้ ก่ มอดลู os และมีเมทอ็ ด rename(oldFile, newFile) สาหรับเปลยี่ นชือ่ กระบวนการเปล่ียน
ช่ือแฟ้มโดยลาดับแรกโปรแกรมจะต้องตรวจสอบหาตาแหน่งที่ต้ังพร้อมกับช่ือแฟ้มเดิมจะต้องมีอยู่จริงหรือไม่
ต่อจากน้นั จึงทาการแก้ไขชื่อแฟ้มเปน็ แฟ้มใหม่ตามอารก์ ิวเมนต์ท่รี ะบุ
รูปแบบ

os.rename(current_file_name, new_file_name)

ตวั อยา่ งท่ี 4.8 การเปลี่ยนช่ือแฟ้ม

1 import os
2 # Rename a file from foo.txt to food.txt
3 os.rename( "foo.txt", "food.txt" )

lesson 4 การเขยี นโปรแกรมเพ่ือจดั การกบั ขอ้ มลู อยา่ งงา่ ย 79

การลบแฟม้ และสารบบ

การลบแฟ้มและสารบบ โปรแกรมภาษาไพทอนใช้มอดูล os และมีเมท็อดสาหรับลบแฟ้มได้แก่
remove(file) และถ้าต้องการลบสารบบใช้เมท็อด rmdir(directory) สาหรับวิธีการลบสารบบท่ียังมีแฟ้มอยู่
ภายในนนั้ จะไมส่ ามารถลบได้ จึงต้องใช้คาสั่งลบแฟ้มให้เสร็จส้ินก่อน แต่ถ้าหากต้องการลบทงั้ สารบบและลบ
แฟม้ ท้งั หมดที่อยู่ภายใต้สารบบแล้ว ใชเ้ มท็อด walk(path)
รปู แบบ

os.remove(file_name)

ตัวอย่างที่ 4.9 การลบแฟ้ม

1 import os
2 # Delete file food.txt
3 os.remove("food.txt")

การจดั การกบั ขอ้ มูล

การคน้ หาขอ้ มูล

ตัวอย่างท่ี 4.10 การคน้ หาข้อมลู ในแฟม้

1 def searchLine():
2 txtFile = open("info.txt", "r")
3 lineList = [ ]
4 i=0
5 for line in txtFile:
6 lineList.append(line.rstrip("\n"))
7 if "chiangrai" in lineList[i]:
8 print(lineList[i - 2])
9 i += 1
10
11 searchtLine()

lesson 4 การเขยี นโปรแกรมเพื่อจดั การกบั ขอ้ มลู อย่างงา่ ย 80

ตัวอย่างท่ี 4.11 การค้นหาข้อมูลในแฟม้

1 def searchLine(word):
2 txtFile = open("info.txt", "r")
3 lineList = []
4 i=0
5 x=0
6 for line in txtFile:
7 lineList.append(line.rstrip("\n"))
8 if word in lineList[i]:
9 print(lineList[i])
10 break
11 else:
12 x += 1
13 i += 1
14 if x== len(lineList):
15 print("ไมม่ "ี )
16
17 text=input("ป้อนชื่อที่ต้องการคน้ หา")
18 searchLine(text)

การเรียงลาดับขอ้ มูล

การเรียงลาดับข้อมูลใน Python น้ัน มีเครื่องมือที่ช่วยอานวยความสะดวกคือ sorted และ list.sort
ความแตกต่างของสองตัวนี้ คือ sorted จะมองแบบ functional ได้ของใหม่ออกมา (โดยท่ีของเก่าไม่เปลี่ยน
คา่ ) สว่ น list.sort จะมองแบบ OOP คือเขา้ ไปเปล่ยี นแปลงการเรยี งลาดบั ในตัว list object

ตัวอย่างที่ 4.12 การเรียกข้อมูลจากนอ้ ยไปหามาก

1 chaos = [4, 1, 0, 3, 2]
2 # functional paradigm
3 print(sorted(chaos))
4 print(chaos)
5 # OOP paradigm
6 chaos.sort()
7 print(chaos)
ผลลัพธท์ ไ่ี ดค้ ือ
[0, 1, 2, 3, 4]
[4, 1, 0, 3, 2]
[0, 1, 2, 3, 4]

lesson 4 การเขยี นโปรแกรมเพื่อจดั การกบั ขอ้ มลู อยา่ งงา่ ย 81

ตัวอย่างท่ี 4.13 การเรียกข้อมลู จากมากไปหาน้อย

1 chaos.sort(reverse=True)
2 print(chaos)
ผลลัพธท์ ไ่ี ด้คือ
[4, 3, 2, 1, 0]

ตัวอย่างท่ี 4.14 การเรยี กข้อมลู ทเี่ ป็นตัวอกั ษร

1 letter = ['a', 'b', 'A', 'B']
2 letter.sort()
3 print(letter)
4 letter.sort(key=str.lower)
5 print(letter)
ผลลพั ธ์ทไ่ี ด้คือ
['A', 'B', 'a', 'b']
['A', 'a', 'B', 'b']

lesson 4 การเขยี นโปรแกรมเพื่อจดั การกบั ขอ้ มลู อย่างงา่ ย 82


Click to View FlipBook Version