在 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(原始字符串,转义符不生效)