สัปดาห์ที่ 5 : การใช้งานสตริง ลีสต์และแฟ้มข้อมูล

» การประกาศตัวแปรสตริง
» เครื่องหมาย Single และ Double Quote ( ' , " )
» เครื่องหมาย Single/Double Quote สามตัว
» การเข้าถึงสมาชิกย่อยภายในสตริง
» การตรวจสอบขนาดความยาวของสตริง
» การวนเข้าไปในสตริง 
» การเข้าถึงข้อมูลบางส่วนในสตริง
» การตรวจสอบข้อความภายในสตริง
» เครื่องหมาย Escape Sequence
» การประกาศตัวแปรชนิดลีสต์
» ตำแหน่งสมาชิกย่อยภายในลีสต์
» การเข้าถึงสมาชิกภายในลีสต์
» ขนาดของลีสต์
» การวนเข้าไปอ่านค่าภายในลีสต์
» การเข้าถึงสมาชิกตัวแปรลีสต์ด้วยอินเด็กซ์
» การเข้าถึงสมาชิกย่อยภายในลีสต์
» การเข้าถึงสมาชิกในลีสต์แบบช่วง
» ฟังก์ชั่นสำหรับตัวแปรลีสต์ การเรียงลำดับข้อมูล การรีเวิร์ส การนับคีย์เวิร์ด การลบสมาชิก การบวกลีสต์ การคูณลีสต์ การเข้าถึงเลขอินเด็กซ์ของข้อมูลภายในลีสต์ 
» การแยกข้อมูลในตัวแปรสตริงเป็นตัวแปรลีสต์ด้วยคำสั่ง split
» การเปิดแฟ้มข้อมูล ด้วยคำสั่ง open
» โหมดการใช้งานแบบ read, write, append
» แฟ้มข้อมูลแบบไบนารีและเท็กซ์โหมด
» ใบงาน 1 : การเขียนคำว่า “สวัสดีชาวโลก” ลงในแฟ้มข้อมูล
» ใบงาน 2 : การอ่านข้อความในแฟ้มข้อมูลออกมาเก็บไว้ในตัวแปรและแสดงผล
» ใบงาน 3 : การอ่านและเขียนไฟล์แบบ binary
» ใบงาน 4 : การเขียนไฟล์แบบ Append
» ใบงาน 5 : การสกัดข้อมูลด้วยคำสั่ง split
» ใบงาน 6 : การอ่านข้อมูลจากเว็บไซต์และสกัดข้อมูลภายในแท็ก < title > ออกมา
» ใบงาน 7 : การอ่านเนื้อเพลงคาราโอเก๊ะในเว็บและสกัดชื่อเพลง นักร้อง และเนื้อเพลงออกมาจาก Unstructured Document
» ใบงาน 8 : การเขียน ชื่อเพลง นักร้องและเนื้อเพลงลงบนไฟล์ในฮาร์ดดีสก์
» ใบงาน 9 : การอ่านรายละเอียดเพลง นักร้องและเนื้อเพลงภายในแฟ้มข้อมูลออกมาแสดงผล
» ใบงาน 10 : การสกัดรายชื่อนิสิตออกมาจากสตริงและเก็บเป็นตัวแปรลีสต์ นำมาเรียงลำดับและเก็บผลลัพธ์ลงในแฟ้มข้อมูล
» ใบงานที่ 11 : อ่านแฟ้มข้อมูลใบงานในข้อ 10 และแสดงผลลัพธ์
» ใบงาน 12 : การดึงข้อมูลจาก Wikipedia เก็บไว้ในตัวแปรสตริงและแสดงผล
» คำถามท้ายบทเรียน

การประกาศตัวแปรสตริง

ตัวแปรชนิดสตริงใช้เก็บข้อความ  สามารถประกาศด้วยเครื่องหมาย double quote (") และ single quote(') 

เครื่องหมาย Single และ Double Quote ( ' , " )

1. การเปิดปิดข้อความด้วยเครื่องหมาย คำพูด (quote)  เช่น a = "Google Gmail Youtube"
2. การเปิดปิดข้อความด้วยเครื่องหมาย  single quote เช่น  a = 'Google Gmail Youtube'

เครื่องหมาย Single/Double Quote สามตัว

การเปิดปิดด้วย triple quote เช่น a = """Google Gmail Youtube""" หรือ a = '''Google Gmail Youtube'''
จงตอบคำถามว่า ประกาศตัวแปรสตริงถูกต้องหรือไม่ ?
a = "It's hot today."
b = 'It's hot today.'
c = """It's hot today."""
d = '''It's hot today.'''

การเข้าถึงสมาชิกย่อยภายในสตริง

1) เลขบวก เป็นการเข้าถึงสมาชิกจากซ้ายไปขวา
2) เลขลบ เป็นการเข้าถึงสมาชิกจากขวามาซ้าย
3) การเข้าถึงสมาชิกแบบช่วง ให้ระบุเลขลำดับเริ่มต้นและลำดับปลายทาง โดยคั่นด้วยเครื่องหมาย colon ( : ) เช่น a = "Google"; a[1:3] จะได้ค่า "oo" เป็นต้น

การตรวจสอบขนาดความยาวของสตริง

การตรวจสอบความยาวใช้ฟังก์ชั่น len() โดยส่งอาร์กิวเมนต์ให้กับฟังก์ชั่น len() ด้วยสตริงที่ต้องการนับความยาว เช่น len("Google Gmail Youtube")  ผลลัพธ์เท่ากับ 20 ตัวอักษร

การวนเข้าไปในสตริง

การวนเข้าไปในสตริงจะเข้าไปทีละตัวอักษร เช่น
t = "Google"
for i in t:
    print(i, i*2, i*3, i*4)
ผลลัพธ์
G GG GGG GGGG
o oo ooo oooo
o oo ooo oooo
g gg ggg gggg
l ll lll llll
e ee eee eeee

การเข้าถึงข้อมูลบางส่วนในสตริง

การเข้าถึงสมาชิกแบบช่วง ให้ระบุเลขลำดับเริ่มต้นและลำดับปลายทาง โดยคั่นด้วยเครื่องหมาย colon ( : ) เช่น a = "Google"; a[1:3] จะได้ค่า "oo" เป็นต้น

การตรวจสอบข้อความภายในสตริง

คำสั่ง in ใช้ตรวจสอบว่ามีข้อความในสตริง เช่น "oo" in "google" ผลลัพธ์ คือ True เพราะมีสตริง "oo" อยู่ในสตริง "google"

เครื่องหมาย Escape Sequence

เครื่องหมาย Escape Sequence  คือ เครื่องหมายที่ต้องการเขียนอักขระพิเศษลงในข้อความ เช่น
\t   หมายถึง แท็บ 
\0   หมายถึง อักขระ NULL (ว่างเปล่า)
\’   หมายถึง อักขระ ' 
\"   หมายถึง อักขระ " 
\\   หมายถึง อักขระ \
\n  หมายถึง ขึ้นบรรทัดใหม่
a = "Google\tYoutube"
print(a)
Google	Youtube
b = "Google\nYoutube"
print(b)

Google
Youtube
c = "It's hot today."
print(c)
It's hot today.
d = 'It\'s hot today.'
print(d)
It's hot today.

การประกาศตัวแปรชนิดลีสต์

อาร์เรย์ 
อาร์เรย์ คือ การประกาศตัวแปรด้วยชื่อเดียวกันและเข้าถึงสมาชิกด้วยหมายเลขดัชนี (index)

การประกาศตัวแปรลีสต์ใช้เครื่องหมาย backet ([ ]) เปิดปิดมีรูปแบบคือ ชื่อตัวแปร  = [ ข้อมูล, ข้อมูล, ข้อมูล ] 

ตำแหน่งสมาชิกย่อยภายในลีสต์

ตำแหน่งสมาชิกย่อยในลีสต์
1) เลขบวก เป็นการเข้าถึงตำแหน่งสมาชิกจากซ้ายไปขวา
2) เลขลบ เป็นการเข้าถึงตำแหน่งสมาชิกจากขวามาซ้าย
3) การเข้าถึงตำแหน่งสมาชิกแบบช่วง ให้ระบุเลขลำดับเริ่มต้นและลำดับปลายทาง โดยคั่นด้วยเครื่องหมาย colon ( : ) เช่น a = [1,2,3,4,5]; a[1:3] จะได้ค่า [2,3] เป็นต้น

ขนาดของลีสต์

การตรวจสอบขนาดของลีสต์ใช้คำสั่ง len() เช่น  x = [3, 2, 5] เมื่อต้องการทราบขนาดของลีสต์ใช้คำสั่ง len(x) มีผลลัพธ์เท่ากับ 3

การวนเข้าไปอ่านค่าภายในลีสต์

การวนเข้าไปในตัวแปรลีสต์ ใช้คำสั่ง for ดังนี้
x = [3, 2, 5] 
for i in x:
    print(i, i*2, i*4, i**2)
3   6   12     9
2   4    8     4
5   10  20   25

การเข้าถึงสมาชิกตัวแปรลีสต์ด้วยอินเด็กซ์

การเข้าถึงสมาชิกด้วยเลขอินเด็กซ์ ใช้คำสั่ง index() ดังนี้
z = ["Google", "Gmail", "Youtube"]
idx = z.index("Youtube")
print(idx)
2
print(z[idx])
Youtube

การเข้าถึงสมาชิกในลีสต์แบบช่วง

การเข้าถึงสมาชิกแบบช่วง ให้ระบุเลขลำดับเริ่มต้นและลำดับปลายทาง โดยคั่นด้วยเครื่องหมาย colon ( : ) เช่น a = [1,2,3,4,5]; a[1:3] จะได้ค่า [2,3] เป็นต้น
a = [5, 3, 6, 7, 2]
print(a)		# ผลลัพธ์ คือ ..............................
print(a[0])		# ผลลัพธ์ คือ ..............................
print(a[-1])	# ผลลัพธ์ คือ ..............................

b = [ 'Google', 'Gmail', 'Youtube' ]
print(b)		# ผลลัพธ์ คือ ..............................
print(b[0])		# ผลลัพธ์ คือ ..............................
print(b[-1])	# ผลลัพธ์ คือ ..............................
print(b[-2])	# ผลลัพธ์ คือ ..............................

c = [ "Google", 3, "Gmail", 8 ]
print(b)		# ผลลัพธ์ คือ ..............................
print(b[0])		# ผลลัพธ์ คือ ..............................
print(b[-1])	# ผลลัพธ์ คือ ..............................
print(b[-2])	# ผลลัพธ์ คือ ..............................

z = [ a, b, c ]
print(z[0])		# ผลลัพธ์ คือ ..............................
print(z[-1])	# ผลลัพธ์ คือ ..............................
print(z[1])		# ผลลัพธ์ คือ ..............................
print(z[-2])	# ผลลัพธ์ คือ ..............................

m = list(range(13))
print(m[0])		# ผลลัพธ์ คือ ..............................
print(m[4])		# ผลลัพธ์ คือ ..............................
print(m[1:2])	# ผลลัพธ์ คือ ..............................
print(m[2:4])	# ผลลัพธ์ คือ ..............................

» การเรียงลำดับตัวแปรลีสต์ใช้คำสั่ง sort()

x = [ 30, 20, 15, 18, 14, 12 ]
print(x)	# ผลลัพธ์ คือ ..............................
x.sort()
print(x)	# ผลลัพธ์ คือ ..............................

» การหาค่าสูงสุดและต่ำสุดในตัวแปรลีสต์

 คำสั่ง max() และ min() ใช้สำหรับหาค่าที่สูงสูงสุดและต่ำสุดในตัวแปรลีสต์
x = [ 30, 20, 15, 18, 14, 12 ]
print(max(x))	# ผลลัพธ์ คือ ..............................
print(min(x))	# ผลลัพธ์ คือ ..............................

» การหาขนาดของตัวแปรลีสต์

 คำสั่ง len() ใช้สำหรับหาขนาดของตัวแปรลีสต์
x = [ 30, 20, 15, 18, 14, 12 ]
print(len(x))	# ผลลัพธ์ คือ ..............................

» การนับจำนวนข้อมูล

 คำสั่ง count() ใช้สำหรับหาขนาดของตัวแปรลีสต์
x = [ 5, 3, 4, 1, 3, 2, 4, 2, 4, 5, 4, 1, 1, 5 ]
print(x.count(3))	# ผลลัพธ์ คือ ..............................
print(x.count(5))	# ผลลัพธ์ คือ ..............................
print(x.count(1))	# ผลลัพธ์ คือ ..............................
print(len(x))		# ผลลัพธ์ คือ ..............................

» การรวมข้อมูล

 คำสั่ง sum() ใช้สำหรับคำนวณผลรวมภายในตัวแปรลีสต์ ใช้สำหรับกรณีที่ตัวแปรในลีสต์เป็นค่าตัวเลขเท่านั้น
x = [ 5, 3, 4, 1, 3, 2, 4, 2, 4, 5, 4, 1, 1, 5 ]
print(sum(x))	# ผลลัพธ์ คือ ..............................

การแยกข้อมูลในตัวแปรสตริงเป็นตัวแปรลีสต์ด้วยคำสั่ง split

การแยกข้อความออกเป็นส่วน ๆ ใช้คำสั่ง split() โดยอาร์กิวเมนต์ที่ป้อนเข้าไปคือ ข้อความที่ใช้ในการแยกสตริงออกจากกัน พิจารณาคำสั่งต่อไปนี้
a = "Google Gmail Youtube"
b = a.split(" ")
print(b)
['Google', 'Gmail', 'Youtube']
print(b[0])  # ผลลัพธ์ คือ ..............................
print(b[-1]) # ผลลัพธ์ คือ ..............................

การตัดคำภาษาไทย

โปรแกรมตัดคำภาษาไทยมีอยู่หลายตัว อาทิ kucut , swatch, lexitron , deepcut และ pythainlp ในหัวข้อนี้จะใช้ไลบรารี่ pythainlp  มีขั้นตอนดังนี้

1. ติดตั้ง pythainlp บน colab ด้วยคำสั่ง !pip install pythainlp
2. หลักการตัดคำใน pythainlp มีหลายตัว ได้แก่ icu, dict, longest-matching, mm, newmm, pylexto, deepcut, wordcutpy ศึกษาเพิ่มเติมในวิชา information retrieval
หมายเหตุ : mm (Maximum Matching) คือ การจับคู่ที่ยาวที่สุด
from pythainlp import word_tokenize
t = "เด็กเอ๋ยเด็กน้อยความรู้เรายังด้อยเร่งศึกษาเมื่อเติบใหญ่เราจะได้มีวิชาเป็นเครื่องหาเลี้ยงชีพสำหรับตน"
a = word_tokenize(text, engine='newmm')
print(a)
ผลลัพธ์ :
['เด็ก', 'เอ๋ย', 'เด็กน้อย', 'ความรู้', 'เรา', 'ยัง', 'ด้อย', 'เร่ง', 'ศึกษา', 'เมื่อ', 'เติบใหญ่', 'เรา', 'จะ', 'ได้', 'มี', 'วิชา', 'เป็น', 'เครื่อง', 'หาเลี้ยงชีพ', 'สำหรับ', 'ตน']

ฟังก์ชั่น set() สำหรับการกำจัดอิลิเมนต์ที่ซ้ำกัน

ฟังก์ชั่น set() เป็นฟังก์ชั่นสำหรับกำจัดอิลิเมนต์ที่ซ้ำกันออกไป โดยผลลัพธ์ของฟังก์ชั่นนี้จะมีชนิดเป็นตัวแปรเซ็ต พิจารณาตัวอย่างต่อไปนี้
a = ['เด็ก', 'เอ๋ย', 'เด็กน้อย', 'ความรู้', 'เรา', 'ยัง', 'ด้อย', 'เร่ง', 'ศึกษา', 'เมื่อ', 'เติบใหญ่', 'เรา', 'จะ', 'ได้', 'มี', 'วิชา', 'เป็น', 'เครื่อง', 'หาเลี้ยงชีพ', 'สำหรับ', 'ตน']
b = set(a)
print(b)
{'วิชา', 'เครื่อง', 'เอ๋ย', 'ด้อย', 'เมื่อ', 'ความรู้', 'เติบใหญ่', 'จะ', 'เด็ก', 'เป็น', 'หาเลี้ยงชีพ', 'ศึกษา', 'สำหรับ', 'ได้', 'มี', 'ตน', 'ยัง', 'เรา', 'เร่ง', 'เด็กน้อย'}
ตอบคำถามต่อไปนี้
1. ฟังก์ชั่น set() ทำหน้าที่อะไร ?
2. z = set([3,2,1,1,1,2,3,2,3]) ตัวแปร z จะมีสมาชิกกี่ตัว อะไรบ้าง ?

การเปิดแฟ้มข้อมูล ด้วยคำสั่ง open

- แฟ้มข้อมูล (file) ใช้เก็บข้อมูลในระบบดิจิทัล เช่น ไฟล์ mp3, word, pdf, mp4 ฯลฯ
- การเปิดไฟล์เพื่ออะไร ? ตอบ ก) เพื่ออ่านข้อมูลภายในไฟล์ (read) ข) เพื่อเขียนข้อมูลลงไฟล์ (write)
- โหมดของการเปิดไฟล์แบ่งเป็น 
        ก) r คือ อ่าน เช่น open("ชื่อไฟล์","r").read()
        ข) w คือ เขียน เช่น open("ชื่อไฟล์","w").write("สวัสดีชาวโลก")
        ค) rb คือ อ่านแบบไบนารี เช่น x = open("ชื่อไฟล์","rb").read()
        ง) wb คือ เขียนแบบไบนารี เช่น open("ชื่อไฟล์","wb").write(x)
        จ) a คือ เขียนต่อท้ายไฟล์ เช่น open("ชื่อไฟล์","a").write("ข้อมูลที่เขียนต่อท้ายไฟล์")

การเปิดแฟ้มข้อมูลด้วยการเข้ารหัส UTF-8

with open('files/files.txt', encoding='utf-8') as f:
    for i in f:
        if "ทส" in i:
            print(i)

แฟ้มข้อมูลแบบไบนารีและเท็กซ์โหมด

ในระบบปฏิบัติการอื่น ๆ จะใช้ข้อมูลแบบไบนารี ยกเว้นระบบปฏิบัติการวินโดวส์ใช้ข้อมูลแบบเท็กซ์โหมด หลักการของเท็กซ์โหมดคือ เมื่อพบสัญลักษณ์ขึ้นต้นบรรทัดใหม่ (\n)  จะเพิ่มสัญลักษณ์ (\r) เข้าไป พิจารณาตัวอย่างต่อไปนี้
data = "a\nb\nc\nd\n"
open("d:/textfile.txt","w").write(data)
open("d:/binaryfile.txt","wb").write(data)
จงตอบคำถามต่อไปนี้
1. ขนาดไฟล์ textfile.txt มีขนาดกี่ไบต์
2. ขนาดไฟล์ binaryfile.txt มีขนาดกี่ไบต์
3. อธิบายเหตุผลที่ เท็กซ์ไฟล์มีขนาดใหญ่กว่าไบนารีไฟล์ ?
4. ถ้าเขียนเท็กซ์ไฟล์ในระบบปฏิบัติการลินุกซ์และ Mac OSx ขนาดไฟล์เท็กซ์ไฟล์และไบนารีจะมีขนาดต่างกันหรือไม่ ?

การอ่านข้อมูลจาก Wikipedia เก็บไว้ในตัวแปรสตริงและแสดงผล

ไลบรารี่ wikipedia-API ใช้สำหรับสกัดข้อความ , ส่วนต่าง ๆ ในหน้าวิกิ, ลิงค์, หมวดหมู่ (category), การแปลเนื้อหาภาษาอื่น ๆ จากเอกสารวิกิพีเดีย มีวิธีการใช้งานดังนี้

1. การติดตั้ง ใช้คำสั่งต่อไปนี้
!sudo pip install wikipedia
!sudo pip install wikipedia-api
2. การใช้งาน
import wikipedia as wiki
wiki.set_lang("th")
data = wiki.summary("โลก", sentences=1)
print(data)
โลก (บาลี: loka; อังกฤษ: world) มีความหมายโดยปริยายหมายถึงหมู่มนุษย์ รวมทั้งอารยธรรมมนุษย์โดยรวมทั้งหมด โดยเฉพาะในด้านประสบการณ์ ประวัติศาสตร์ หรือสภาพของมนุษย์โดยทั่ว ๆ ไป ทั้งนี้ คำว่า ทั่วโลก หมายถึงสถานที่ใด ๆ บนดาวเคราะห์โลกในทางปรัชญามองโลกอยู่ 2 แบบ 

การอ่านข้อมูลจากเว็บไซต์

ในภาษา python เวอร์ชั่น 3 ใช้คำสั่ง urlopen ดังนี้
import urllib.request
x = urllib.request.urlopen('http://dsdi.msu.ac.th').read()
output = x.decode('utf-8')
print(output)
การเข้ารหัสภาษาไทยต้องดูที่ซอร์สโค๊ดของ HTMl ว่าเข้ารหัสเป็นอะไร โดยดูจากแท็ก  เมื่อ xxx คือการเข้ารหัสตัวอักษรแบบต่าง ๆ
1) เข้ารหัสด้วย TIS-620 หรือ windows-874 ให้ถอดรหัสด้วยคำสั่ง 
import urllib.request
x = urllib.request.urlopen('https://tdc.thailis.or.th/tdc/browse.php?option=show&browse_type=title&titleid=5').read().decode('cp874', 'ignore')

2) เข้ารหัสด้วย UTF-8 ให้ถอดรหัสด้วยคำสั่ง
import urllib.request
x = urllib.request.urlopen('http://dsdi.msu.ac.th').read().decode('utf-8', 'ignore')
print(x)

ใบงาน 1 : การอ่านข้อมูลจากเว็บไซต์และสกัดข้อมูลภายในแท็ก < title > ออกมา

ใบงาน 2 : การอ่านข้อมูลจากเว็บไซต์คาราโอเก๊ะและสกัดเนื้อเพลงออกมา

ใบงาน 3 : ดึงข้อมูลจาก wiki pedia ด้วยคำค้นที่กำหนดเอง

ใบงาน 4 : นำข้อมูลจากใบงานที่ 3 มาตัดคำภาษาไทยและตัดคำซ้ำซ้อนทิ้งไป

ใบงาน 5 : ดึงข้อมูลจากฐานข้อมูลไทยลีสต์และสกัดไตเติ้ลของวิทยานิพนธ์ออกมา

- สกัดข้อมูลในส่วนของ Title และ Title Alternative ของวิทยานิพนธ์ออกมาจากฐานวิทยานิพนธ์ไทยลีสต์ เช่น ลิงค์ https://tdc.thailis.or.th/tdc/browse.php?option=show&browse_type=title&titleid=5
- ส่วนของ Title คือคำว่า "การศึกษาสภาพและปัญหาการจัดการศึกษาระดับก่อนประถมศึกษาขององค์การบริหารส่วนตำบลในจังหวัดสุพรรณบุรี"
- ส่วนของ Title Alternative คือ คำว่า "A STUDY OF STATE AND PROBLEMS OF EDUCATION MANAGEMENT IN PRE-PRIMARY EDUCATION LEVEL OF SUBDISTRICT ADMINISTRATION ORGANIZATION IN SUPHANBURI PROVINCE"
ตัวอย่าง : การดึงข้อมูลจากฐานข้อมูลวิทยานิพนธ์ไทยลีสต์
import urllib.request
x = urllib.request.urlopen('https://tdc.thailis.or.th/tdc/browse.php?option=show&browse_type=title&titleid=5').read()
t = x.decode('utf-8','ignore')

ตัวอย่างการสกัดเนื้อเพลง

import urllib.request
t = urllib.request.urlopen('https://www.sanook.com/music/song/OOfyeYu4KNNePlfoRwXQPg==/').read().decode('utf-8')
z = t.split('Written by:")[-1]
z = z.split("***เนื้อเพลงจากที่อื่น***")[0]
z = z.replace(" "," ")
z = z.replace("

","\n") content = z.split("\n") for i in content[3:]: print(i)

วีดีโอบรรยาย ตอน 1/2

» ตัวแปรสตริงและลีสต์และไฟล์

วีดีโอบรรยาย ตอน 2/2

» การสกัดคำภาษาไทย

บรรยากาศการเรียนการสอน

รายชื่อการเข้าเรียนและส่งงาน

» ไม่พบกิจกรรมการเรียนในสัปดาห์นี้ กรุณาตรวจสอบเวลา : วันนี้ คือ วันที่ 14-11-2024
สัปดาห์ที่ 5 : การใช้งานสตริง ลีสต์และแฟ้มข้อมูล