在 Python 中,字符串是最常用的數據類型之一,掌握字符串的各種操作對于日常編程至關重要。本文將詳細介紹 Python 字符串的類型特性、編碼轉換、常用運算符及方法,幫助你全面掌握字符串處理技巧。
一、字符串的基本類型
Python 中的字符串屬于?str
?類型,以字符為單位進行處理;而經過編碼后的字符串則屬于?bytes
?類型,以字節為單位處理。
# 查看字符串類型?
a = "hello world"?
print(type(a)) # <class 'str'>
二、字符串的編碼與解碼
字符串的編碼(encode()
)和解碼(decode()
)是處理文本數據的重要操作,尤其在網絡傳輸和文件讀寫時經常用到。
1. 編碼(str → bytes)
將字符串轉換為字節序列,默認使用 UTF-8 編碼,也可指定其他編碼方式。
a = "hello world"
a1 = a.encode() # 默認UTF-8編碼
print(type(a1)) # <class 'bytes'># 指定編碼方式為UTF-8
a3 = "字符串"
a4 = a3.encode("utf-8")
print(a4, type(a4)) # b'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2' <class 'bytes'>
2. 解碼(bytes → str)
將字節序列轉換回字符串,需與編碼時使用的方式一致。
a = 'hello world'
a1 = a.encode('utf-8')
print(type(a1)) # <class 'bytes'>a2 = a1.decode('utf-8')
print(type(a2)) #<class 'str'>
三、字符串常用運算符
1. 拼接(+)
將兩個字符串合并為一個。
a = "字符串"
b = "拼接"
print(a + b) # 字符串拼接
2. 重復輸出(*)
重復指定次數的字符串。
b = "字符串"
print(b * 4) # 字符串字符串字符串字符串
3. 成員檢查(in /not in)
判斷子串是否存在于字符串中。
c = "字符串哈哈哈"
print("哈" in c) # True(存在)
print("ha" not in c) # True(不存在)
print("字符" not in c) # False(存在)
4. 下標訪問([])
通過下標獲取單個字符,從左向右從 0 開始,從右向左從 -1 開始。
d = "字符串哈哈哈"
print(d[5]) # 哈(正向索引:第6個字符)
print(d[-4]) # 串(反向索引:從右數第4個字符)
5. 切片([:])
截取字符串的一部分,遵循 **“包前不包后”** 原則(包含起始下標,不包含結束下標),支持指定步長。
e = "包前不包后原則"
# 基礎切片
print(e[0:2]) # 包前(截取0-1下標)
print(e[1:]) # 前不包后原則(從1下標到結尾)
print(e[:5]) # 包前不包后(從開頭到4下標)# 反向切片
print(e[-4:]) # 包后原則(從-4下標到結尾)# 步長控制(步長正負決定方向)
print(e[-3:-1:1]) # 后原(步長1,正向截取-3到-2)
print(e[-2::-1]) # 原后包不前包(步長-1,反向截取從-2到開頭)
四、字符串常用方法
1. 查找子串位置
find(sub)
:返回子串首次出現的下標,不存在則返回 -1。index(sub)
:功能與?find
?相同,但子串不存在時會報錯。
a = "abcdefg"
print(a.find("cd")) # 2(子串"cd"從下標2開始)
print(a.find("bhd")) # -1(子串不存在)
print(a.find("cde", 2)) # 2(從下標2開始查找)
2. 統計子串出現次數(count (sub))
返回子串在字符串中出現的次數,支持指定查找范圍。
a = "abcdefgabc"
print(a.count("abc")) # 2(全局查找)
print(a.count("abc", 4)) # 1(從下標4開始查找)
3. 判斷前綴 / 后綴(startswith /endswith)
檢查字符串是否以指定子串開頭或結尾,支持指定范圍。
a = "abcdefgabc"
print(a.startswith("ab")) # True(以"ab"開頭)
print(a.endswith("g")) # False(不以"g"結尾)
print(a.startswith("ab", 3, 5)) # False(在3-5下標范圍內不匹配)
4. 大小寫轉換
capitalize()
:首字母大寫,其余小寫。lower()
?/?upper()
:全小寫 / 全大寫。title()
:每個單詞首字母大寫。
st = 'hello,python'
print(st.capitalize()) # Hello,python
print(st.upper()) # HELLO,PYTHON
print(st.title()) # Hello,Python
5. 替換子串(replace (old, new, count))
替換指定子串,count
?可選(指定替換次數,默認全部替換)。
a = "old people old boy"
print(a.replace("old", "young")) # young people young boy(全部替換)
print(a.replace("old", "young", 1)) # young people old boy(替換1次)
6. 分割字符串(split (sep, maxsplit))
按指定分隔符分割字符串,返回列表,maxsplit
?可選(指定最大分割次數)。
st = 'hello,python'
print(st.split(',')) # ['hello', 'python'](按逗號分割)
print(st.split('o', 1)) # ['hell', ',python'](按'o'分割1次)
7. 移除空白 / 指定字符(strip 系列)
lstrip()
:移除左側空白 / 指定字符。rstrip()
:移除右側空白 / 指定字符。strip()
:移除兩側空白 / 指定字符。
st = '\t\nhello,python\t\n'
print(st.strip()) # hello,python(移除兩側空白)st = '!!hello,python!!!'
print(st.strip('!')) # hello,python(移除兩側'!')
8. 居中、左對齊、右對齊
center(width, fillchar)
:將字符串居中,并用指定字符填充至指定寬度,默認填充空格。ljust(width, fillchar)
:左對齊,用指定字符填充至指定寬度。rjust(width, fillchar)
:右對齊,用指定字符填充至指定寬度。
s = "hello"
print(s.center(10, "*")) # **hello***
print(s.ljust(10, "-")) # hello-----
print(s.rjust(10, "=")) # =====hello
9. 判斷字符串特性
isalpha()
:判斷字符串是否只包含字母,且非空。isdigit()
:判斷字符串是否只包含數字,且非空。isalnum()
:判斷字符串是否只包含字母和數字,且非空。isspace()
:判斷字符串是否只包含空白字符,且非空。
print("abc".isalpha()) # True
print("123".isdigit()) # True
print("abc123".isalnum())# True
print(" \t\n".isspace())# True
10. 拼接列表為字符串
join(iterable)
:將可迭代對象中的元素以指定字符串為分隔符拼接成新字符串。
lst = ["hello", "python", "world"]
print("-".join(lst)) # hello-python-world
print("".join(lst)) # hellopythonworld
五、字符串格式化
1. % 格式化
通過?%
?占位符格式化字符串,支持多種數據類型。
占位符 | 說明 |
---|---|
%c | 格式化字符及 ASCII 碼 |
%s | 格式化字符串 |
%d | 格式化整數 |
%o | 格式化八進制數 |
%x/%X | 格式化十六進制數(小寫 / 大寫) |
%f | 格式化浮點數 |
%e/%E | 科學計數法格式化浮點數 |
name = "Alice"
age = 25
pi = 3.1415926
print("hello, %s!" % name) # hello, Alice!
print("年齡: %d" % age) # 年齡: 25
print("兩位小數: %.2f" % pi) # 兩位小數: 3.14
print("十六進制: %x" % 255) # 十六進制: ff
2. f-string(Python 3.6+)
更簡潔的格式化方式,支持直接嵌入變量和表達式。
name = "Alice"
subject = {'name': 'Alice', 'age': 25}
print(f'hello, {name}!') # hello, Alice!
print(f'my friend is {subject["name"]}, age {subject["age"]}') # my friend is Alice, age 25
print(f'1+1={1+1}') # 1+1=2(支持表達式)
3. 三引號(多行字符串)
保留字符串的換行和縮進,適合定義多行文本。
para_str = """這是一個多行字符串的實例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用換行符 [ \n ]。
"""
print(para_str)這是一個多行字符串的實例
多行字符串可以使用制表符
TAB ( )。
也可以使用換行符 [ ]。
六、字符串的不可變性
Python 中的字符串是不可變的,即創建后不能修改其內容。當對字符串進行修改操作(如拼接、替換等)時,實際上是創建了一個新的字符串對象。
s = "hello"
s[0] = "H" # 報錯:'str' object does not support item assignment# 看似修改,實則創建新對象
s_new = s.replace("h", "H")
print(s,id(s)) #hello 1539940498544
print(s_new,id(s_new)) #Hello 1539940498672
七、原始字符串
在字符串前加?r
?或?R
,表示原始字符串,字符串中的轉義字符不會被處理,適用于路徑表示等場景。
print("C:\\Users\\test") # C:\Users\test
print(r"C:\Users\test") # C:\Users\test(原始字符串,轉義符不生效)