The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by chaowalert, 2019-12-18 01:52:12

บทที่ 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