Python 學習日記 EP 6 - 字串的操作

參考書目: Python自動化的樂趣: 搞定重複瑣碎&單調無聊的工作

📝 字串的處理

📓 雙引號

字串可以使用雙引號 " 括住字串的起始和結尾,用法和單引號一樣。用雙引號的好處之一是在字串中可以使用單引號字元。

1
sentence = "This is Carol's pencil."

但是,字串中需要有單引號和雙引號同時存在時,就要用到轉義字元。

📓 轉義字元

轉義字元(escape character),可以讓我們輸入一些不能直接放在字串裡的字元。轉義字元就是將一條反斜線(\),放在想要輸入的特殊字元之前,兩個成一組視為一個字元。例如,單引號是以 \'表示。如此一來便可以在字串中同時輸入單/雙引號。

轉義字元 實際字元
\' 單引號
\" 雙引號
\t 定位空格
\n 換行
\\ 反斜線
1
print("Hi Kevin!\nHow are you?\nI\'m always here for you.")

📓 原始字串

在字串開頭的引號之前加上 r ,這個字串就會變成"原始字串(raw string)"。原始字串會忽略掉引號內的所有轉義字元,印出字串時,會連同轉義字元一起印出。

1
print(r"This is Carol\'s pencil.")

📓 多行字串

儘管可以使用\n轉義字元讓字串換行,但三重引號的多行字串更加好用。Python 中的多行字串是以三個單或雙引號包住,在三重引號包住範圍內的所有引號、定位空格等轉義字元,都會被視為字串的一部份,Python 的程式碼縮排規則不適用於多行字串。

1
2
3
4
5
6
7
print('''Dear John,

Lura's fish has been moved to new fish tank.

Sincerely,
David
''')

📓 多行註解

1
2
3
4
5
"""
Multiline Comment in Python
Multiline Comment in Python
Multiline Comment in Python
"""

📝 字串索引與切片

字串和串列相同都能透過索引和切片取得想要的部分。以字串Hello World!為例,一共有12個字元(包含空格),索引就是 0 ~ 11。

1
2
3
4
5
6
sentence = "Hello World!"
print(sentence[0])
print(sentence[4])
print(sentence[0:5])
print(sentence[:6])
print(sentence[5:])

字串切片並不會影響原有字串。


📝 in 和 not in 運算子

如同串列一樣,字串也能夠使用 in、not in 運算子,比對特定的字元或字串是否存在,運算後回傳布林值 True 或 False。

1
2
3
print('Hello' in 'Hello World')
print('HELLO' in 'Hello World')
print('HELLO' not in 'Hello World')


📝 字串的方法(部分)

📓 upper()、lower()

  • upper(),將字串中的所有字母轉成大寫並回傳字串
  • lower(),將字串中的所有字母轉成小寫並回傳字串
1
2
3
4
5
6
7
sentence = 'Hello World!'

sentence = sentence.upper()
print(sentence)

sentence = sentence.lower()
print(sentence)

📓 isupper()、islower()

  • isupper(),若字串中的所有字母皆為大寫則回傳 True,否則回傳 False

  • islower(),若字串中的所有字母皆為小寫則回傳 True,否則回傳 False

1
2
3
4
5
6
7
8
9
sentence = 'Hello World!'

print(sentence.isupper())

print(sentence.islower())

print('abc123'.islower())

print('abc123'.upper().islower())

📓 字串比對方法 (isX)

  • isalpha(),字串中只有字母且不是空字串則回傳 True,否則回傳 False

  • isalnum(),字串中只有字母和數字且不是空字串則回傳 True,否則回傳 False

  • isdecimal(),字串中只有數字且不是空字串則回傳 True,否則回傳 False

  • isspace(),字串中只有空格、定位空格和換行且不是空字串則回傳 True,否則回傳 False

1
2
3
4
5
print('hello'.isalpha())
print('hello123'.isalpha())
print('hello123'.isalnum())
print('123'.isdecimal())
print(' '.isspace())

📓 startswith()、endswith()

  • startswith(),傳入要比對的字元,若字串以該字元為開頭,則回傳 True,否則回傳 False

  • endswith(),傳入要比對的字元,若字串以該字元為結尾,則回傳 True,否則回傳 False

1
2
3
4
5
6
7
print('Hello World!'.startswith('Hello'))

print('Hello World!'.endswith('World!'))

print('abc123'.startswith('abcde'))

print('abc123'.endswith('12'))

📓 join()、split()

  • join(),以某字串呼叫 join() 方法並將串列傳入後,會返回一個將某字串與串列中的內容連接起來的新字串
1
2
print(','.join(['fish','puppy','kitty']))
print(' and '.join(['fish','puppy','kitty']))

  • split(),功能與 join() 相反,以字串呼叫後,傳回以空格(預設)作為分割字元的串列。另外,亦可傳入特定的分割字元,指定該如何切割字串到串列中(分割字元不會被放到串列中)
1
2
3
print('Her name is Shelly Wang.'.split())

print('HerABnameABisABShellyABWang.'.split('AB'))

📓 rjust()、ljust()、center()

  • rjust(),傳入引數作為靠右對齊時要插入的左方空格和原字串加起來的長度

  • ljust(),傳入引數作為靠左對齊時要插入的右方空格和原字串加起來的長度

  • center(),傳入引數作為置中對齊時要插入的左右空格和原字串加起來的長度

1
2
3
print('Hello'.rjust(10))
print('Hello'.ljust(10))
print('Hello'.center(10))

1
2
3
print('Hello'.rjust(10,'*'))
print('Hello'.ljust(10,'-'))
print('Hello'.center(10,'='))

上述三個方法都可以再傳入第二個引數,指定要用什麼字元填補空格。

📓 strip()、rstrip()、lstrip()

  • strip(),刪除字串左右兩邊的多餘空格

  • rstrip(),刪除字串右邊的多餘空格

  • lstrip(),刪除字串左邊的多餘空格

1
2
3
4
sentence = '     Hello World!     '
print(sentence.strip())
print(sentence.rstrip())
print(sentence.lstrip())

1
2
3
4
sentence = 'LoremBaconInpusumRoroLoremLorem'
print(sentence.strip('Lorem'))
print(sentence.rstrip('Lorem'))
print(sentence.lstrip('Lorem'))

這個方法亦可傳入引數,指定要刪除的左右字元。


📝 pyperclip 模組

pyperclip 模組有 copy() 和 paste() 方法,可向電腦系統中的剪貼簿傳送或接收文字。

pyperclip 不是 python 內建的模組,要先安裝才能使用。

1
2
3
import pyperclip
pyperclip.copy('Hello World!')
pyperclip.paste()

分享到