Python ชนิดข้อมูล String



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

การสร้าง string

ครอบข้อความด้วยเครื่องหมายคำพูดเดี่ยวหรือคู่ก็ได้ ผลเหมือนกัน เลือกให้เหมาะกับเนื้อหา

a = 'สวัสดี'
b = "เขาพูดว่า 'ไปกันเถอะ'"
c = 'ร้าน "กาแฟดี" เปิดแล้ว'

ถ้าข้อความยาวหลายบรรทัด ใช้เครื่องหมายคำพูดสามตัว

message = """เรียนคุณลูกค้า

ขอบคุณที่ใช้บริการ
ทีมงาน comscidev
"""

เชื่อมและทำซ้ำ

first = "สม"
last = "ชาย"

print(first + last)       # สมชาย
print(first + " " + last) # สม ชาย
print("-" * 20)           # --------------------

การเอา string มา * ตัวเลข คือการทำซ้ำ มีประโยชน์เวลาทำเส้นคั่น

ความยาวและการเข้าถึงตัวอักษร

len() บอกจำนวนตัวอักษร ส่วนการเข้าถึงตัวอักษรทีละตัวใช้เลขลำดับ (index) ในวงเล็บเหลี่ยม โดยเริ่มนับจาก 0

word = "Python"

print(len(word))   # 6
print(word[0])     # P
print(word[1])     # y
print(word[-1])    # n  (ติดลบคือนับจากท้าย)

ตัด string เป็นช่วง (slicing)

word[เริ่ม:จบ] ดึงตั้งแต่ตำแหน่งเริ่ม ไปจนถึงก่อนตำแหน่งจบ

word = "Python"

print(word[0:3])   # Pyt
print(word[2:])    # thon
print(word[:4])    # Pyth

เดี๋ยวเรื่อง slicing จะมีบทเจาะลึกอีกที ตอนนี้รู้แค่นี้พอ

string เปลี่ยนค่าทีละตัวไม่ได้

จุดที่หลายคนงง string ใน Python แก้ไขตัวอักษรข้างในไม่ได้

word = "Python"
word[0] = "J"   # Error! TypeError

ถ้าอยากได้ค่าใหม่ ต้องสร้าง string ใหม่ขึ้นมาแทน

word = "Python"
word = "J" + word[1:]
print(word)   # Jython

เมท็อดที่ใช้บ่อย

เมท็อดคือฟังก์ชันที่ติดมากับ string เรียกใช้โดยเติม . หลังตัวแปร ทุกเมท็อดในนี้จะคืน string ตัวใหม่ ไม่ได้แก้ตัวเดิม

แปลงตัวพิมพ์

s = "python Programming"

print(s.upper())        # PYTHON PROGRAMMING
print(s.lower())        # python programming
print(s.title())        # Python Programming
print(s.capitalize())   # Python programming

ตัดช่องว่าง

strip() ตัดช่องว่างหน้าหลัง ใช้บ่อยมากกับข้อมูลที่รับมาจากผู้ใช้หรือไฟล์

raw = "   สมชาย   "
print(raw.strip())        # "สมชาย"
print(raw.strip() + "!")  # "สมชาย!"

ค้นหาและแทนที่

text = "ฉันชอบกาแฟ กาแฟอร่อย"

print(text.replace("กาแฟ", "ชา"))   # ฉันชอบชา ชาอร่อย
print(text.count("กาแฟ"))            # 2
print(text.find("อร่อย"))            # ตำแหน่งที่เจอ (ถ้าไม่เจอได้ -1)

เช็คเนื้อหา

email = "test@example.com"

print(email.startswith("test"))   # True
print(email.endswith(".com"))     # True
print("@" in email)               # True
print("123".isdigit())            # True (เป็นตัวเลขล้วนไหม)

in ใช้เช็คว่ามีข้อความย่อยอยู่ข้างในไหม สะดวกและอ่านง่าย

แยกและรวม

split() แยก string เป็นลิสต์ ส่วน join() เอาลิสต์กลับมารวมเป็น string

csv = "แดง,เขียว,น้ำเงิน"
colors = csv.split(",")
print(colors)   # ['แดง', 'เขียว', 'น้ำเงิน']

joined = " / ".join(colors)
print(joined)   # แดง / เขียว / น้ำเงิน

ตัวอย่างรวม: ทำความสะอาดข้อมูลชื่อ

raw = "  somCHAI  jaidee "

# ตัดช่องว่าง แล้วจัดเป็นตัวขึ้นต้นใหญ่
clean = raw.strip().title()
print(clean)   # Somchai Jaidee

# แยกชื่อกับนามสกุล
first, last = clean.split()
print(f"ชื่อ: {first}")
print(f"นามสกุล: {last}")

ผลลัพธ์:

Somchai Jaidee
ชื่อ: Somchai
นามสกุล: Jaidee

สรุป

  • สร้าง string ด้วย '...', "..." หรือ """...""" สำหรับหลายบรรทัด
  • เข้าถึงตัวอักษรด้วย index เริ่มที่ 0 และติดลบคือนับจากท้าย
  • string แก้ทีละตัวไม่ได้ ต้องสร้างใหม่
  • เมท็อดที่ต้องจำ: strip(), upper()/lower(), replace(), split(), join(), และ in สำหรับเช็คข้อความย่อย

บทถัดไปว่าด้วยการแปลงชนิดข้อมูล (type casting) ซึ่งเราแอบใช้มาหลายบทแล้ว คราวนี้จะดูให้ครบ