python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python字符串String常用方法

Python字符串String方法全解:新手必学常用操作和实战案例

作者:小小测试开发

在Python编程中,字符串(String)是最基础且高频使用的数据类型之一,本文将系统梳理字符串的核心特性、创建方式、常用方法,结合大量实战示例,带你从“会用”到“活用”字符串

在Python编程中,字符串(String)是最基础且高频使用的数据类型之一,用于表示文本信息。无论是用户输入处理、文本分析、接口数据交互,还是日志记录,都离不开字符串的操作。Python为字符串提供了丰富的内置方法,覆盖了查找、替换、分割、拼接、转换等几乎所有日常开发需求。本文将系统梳理字符串的核心特性、创建方式、常用方法,结合大量实战示例,带你从“会用”到“活用”字符串。

一、先搞懂:字符串的核心特性(对比列表/元组更易理解)

字符串与列表、元组同属序列类型,但因“不可变”特性和文本专属功能,存在显著差异。通过对比表快速明确核心特征:

特性字符串(String)列表(List)元组(Tuple)
数据结构不可变字符序列可变序列(任意类型元素)不可变序列(任意类型元素)
可变性不可变(创建后无法修改单个字符)可变(支持增删改元素)不可变(创建后无法修改)
访问方式通过索引(0开始)、切片访问单个/多个字符通过索引、切片访问元素通过索引、切片访问元素
元素类型仅字符(单个字符串)任意类型(数字、字符串、列表等)任意类型(数字、字符串、列表等)
适用场景文本存储、用户输入、数据格式化等动态数据存储、任务队列等固定数据存储、多返回值等

字符串核心特性总结: 

二、字符串的4种常见创建方式

Python中创建字符串简单灵活,主要有以下4种方式,按需选择即可:

1. 直接用引号创建(最常用)

支持单引号(’ ')、双引号(" "),两者功能完全一致,可嵌套使用(内外引号不同即可):

# 单引号创建
s1 = 'Hello Python'
# 双引号创建(适合字符串内包含单引号)
s2 = "I'm a Python developer"
print(s1)  # 输出:Hello Python
print(s2)  # 输出:I'm a Python developer

2. 三引号创建(多行字符串/保留格式)

支持三单引号(‘’’ ‘’')、三双引号(“”" “”“”),适合创建多行字符串,会保留原始换行、空格格式:

# 多行字符串
s3 = '''这是一篇
多行字符串
保留换行格式'''
print(s3)
# 输出:
# 这是一篇
# 多行字符串
# 保留换行格式

# 用于注释(多行注释本质是未使用的字符串)
'''
这是多行注释
不会被执行
'''

3. 用str()函数创建(类型转换)

str()函数可将其他数据类型(数字、列表、元组等)转换为字符串:

# 数字转字符串
num = 123
s4 = str(num)
print(type(s4))  # 输出:<class 'str'>

# 列表转字符串
lst = [1, 2, 3]
s5 = str(lst)
print(s5)  # 输出:[1, 2, 3]

4. 原始字符串(忽略转义字符)

在字符串前加r,可让字符串中的转义字符(如\n、\t)失效,按原始字符输出,适合路径、正则表达式等场景:

# 普通字符串(\n是换行符)
s6 = 'C:\new\test.txt'
print(s6)  # 输出会乱码(\n被解析为换行)

# 原始字符串(\n按普通字符输出)
s7 = r'C:\new\test.txt'
print(s7)  # 输出:C:\new\test.txt

三、字符串常用方法全解析(按功能分类)

Python字符串的内置方法多达数十种,按“查找与替换、分割与拼接、判断与转换、修剪与填充、其他实用操作”分类解析,覆盖90%+开发场景:

1. 查找与替换:定位字符/替换文本

核心需求:查找子串位置、统计子串出现次数、替换指定子串。

find():查找子串首次出现位置

语法:str.find(sub, start=0, end=len(str))

作用:从字符串中查找子串sub,返回首次出现的索引;未找到返回-1(不报错)。可通过start、end指定查找范围。

s = 'Hello Python, I love Python'
# 查找首次出现的"Python"
print(s.find('Python'))  # 输出:6
# 从索引10开始查找
print(s.find('Python', 10))  # 输出:21
# 查找不存在的子串
print(s.find('Java'))  # 输出:-1

index():查找子串首次出现位置(未找到报错)

语法:str.index(sub, start=0, end=len(str))

作用:与find()功能一致,但子串未找到时会报ValueError。

s = 'Hello Python'
print(s.index('Python'))  # 输出:6
# 未找到子串,报错
# print(s.index('Java'))  # 报错:ValueError: substring not found

注意点:确定子串存在时用index(),不确定时用find()(避免报错)。

count():统计子串出现次数

语法:str.count(sub, start=0, end=len(str))

作用:统计子串sub在字符串中出现的次数,未找到返回0。

s = 'Hello Python, I love Python'
# 统计"Python"出现次数
print(s.count('Python'))  # 输出:2
# 统计单个字符出现次数
print(s.count('o'))  # 输出:3

replace():替换子串

语法:str.replace(old, new, count=-1)

作用:将字符串中的old子串替换为new子串;count指定替换次数(默认-1,即替换所有)。返回新字符串,不修改原字符串(因字符串不可变)。

s = 'Hello Python, I love Python'
# 替换所有"Python"为"Java"
s1 = s.replace('Python', 'Java')
print(s1)  # 输出:Hello Java, I love Java

# 只替换第一次出现的"Python"
s2 = s.replace('Python', 'Java', 1)
print(s2)  # 输出:Hello Java, I love Python

# 原字符串未变
print(s)  # 输出:Hello Python, I love Python

2. 分割与拼接:拆分字符串/合并序列

核心需求:将字符串拆分为列表、将序列元素合并为字符串。

split():按指定分隔符拆分字符串

语法:str.split(sep=None, maxsplit=-1)

作用:按sep分隔符拆分字符串,返回列表;sep=None时,按任意空白字符(空格、换行、制表符)拆分;maxsplit指定最大拆分次数(默认-1,即全部分拆)。

s = 'Hello Python I love coding'
# 按空格拆分(默认)
print(s.split())  # 输出:['Hello', 'Python', 'I', 'love', 'coding']

# 按指定字符拆分
s1 = 'a,b,c,d'
print(s1.split(','))  # 输出:['a', 'b', 'c', 'd']

# 限制拆分次数(只拆分2次)
print(s1.split(',', 2))  # 输出:['a', 'b', 'c,d']

rsplit():从右侧开始拆分字符串

语法:str.rsplit(sep=None, maxsplit=-1)

作用:与split()功能类似,但从字符串右侧开始拆分,适合路径、文件名等场景。

# 拆分文件路径(获取文件名)
path = 'C:/user/documents/test.txt'
# 从右侧按'/'拆分1次
print(path.rsplit('/', 1))  # 输出:['C:/user/documents', 'test.txt']
# 获取文件名
filename = path.rsplit('/', 1)[1]
print(filename)  # 输出:test.txt

splitlines():按换行符拆分字符串

语法:str.splitlines(keepends=False)

作用:按换行符(\n、\r、\r\n等)拆分字符串,返回列表;keepends=True时保留换行符。

s = '第一行\n第二行\r第三行\r\n第四行'
# 拆分换行符,不保留
print(s.splitlines())  # 输出:['第一行', '第二行', '第三行', '第四行']
# 保留换行符
print(s.splitlines(keepends=True))  # 输出:['第一行\n', '第二行\r', '第三行\r\n', '第四行']

join():合并序列为字符串(高效拼接)

语法:str.join(iterable)

作用:以当前字符串为分隔符,将可迭代对象(列表、元组、字符串等)的元素合并为新字符串。注意:可迭代对象的元素必须是字符串类型。

# 合并列表为字符串(用逗号分隔)
lst = ['a', 'b', 'c', 'd']
s1 = ','.join(lst)
print(s1)  # 输出:a,b,c,d

# 合并字符串(无分隔符)
s2 = ''.join(['Hello', ' ', 'Python'])
print(s2)  # 输出:Hello Python

# 高效拼接大量字符串(比"+"更高效)
# 错误示例:元素含非字符串类型
# lst2 = [1, 2, 3]
# print(','.join(lst2))  # 报错:TypeError: sequence item 0: expected str instance, int found
# 正确做法:先转换为字符串
lst2 = [1, 2, 3]
s3 = ','.join(str(x) for x in lst2)
print(s3)  # 输出:1,2,3

注意点:字符串拼接优先用join(),比"+“效率更高(”+"会创建多个临时字符串,join()只创建一个)。

3. 判断与转换:验证字符串格式/转换大小写

核心需求:验证字符串是否符合特定格式(如数字、字母、邮箱)、转换字符串大小写。

大小写转换:upper()/lower()/capitalize()/title()

s = 'hello Python'
# 转为全大写
print(s.upper())  # 输出:HELLO PYTHON
# 转为全小写
print(s.lower())  # 输出:hello python
# 首字母大写,其余小写
print(s.capitalize())  # 输出:Hello python
# 每个单词首字母大写
print(s.title())  # 输出:Hello Python

实战场景:忽略大小写判断用户输入:

user_input = input('请输入"确认"或"取消":')
# 转为小写后判断,忽略用户输入大小写
if user_input.lower() == '确认':
    print('执行确认操作')
elif user_input.lower() == '取消':
    print('执行取消操作')
else:
    print('输入格式错误')

判断字符串格式:is系列方法

方法核心作用示例
isalpha()判断是否全为字母(含中文)‘Python’.isalpha() → True;‘Python123’.isalpha() → False
isdigit()判断是否全为数字(0-9)‘123’.isdigit() → True;‘123a’.isdigit() → False
isalnum()判断是否全为字母或数字(含中文)‘Python123’.isalnum() → True;‘Python@123’.isalnum() → False
isspace()判断是否全为空白字符(空格、换行、制表符)’ \n\t’.isspace() → True;’ a '.isspace() → False
startswith(prefix)判断是否以指定前缀开头‘Hello Python’.startswith(‘Hello’) → True
endswith(suffix)判断是否以指定后缀结尾‘test.txt’.endswith(‘.txt’) → True
实战场景:验证文件格式:
filename = 'report.xlsx'
# 判断是否为Excel文件(.xlsx或.xls)
if filename.endswith(('.xlsx', '.xls')):
    print('Excel文件,可读取')
else:
    print('非Excel文件,格式不支持')

4. 修剪与填充:去除空白/补齐字符串长度

核心需求:去除字符串首尾空白字符、按指定长度填充字符串(对齐)。

修剪空白:strip()/lstrip()/rstrip()

s = '   Hello Python   \n'
# 去除首尾所有空白字符(空格、换行、制表符)
print(s.strip())  # 输出:Hello Python
# 只去除左侧空白
print(s.lstrip())  # 输出:Hello Python   \n
# 只去除右侧空白
print(s.rstrip())  # 输出:   Hello Python

# 去除指定字符(非空白字符)
s1 = '###Hello Python###'
# 去除首尾的'#'
print(s1.strip('#'))  # 输出:Hello Python

实战场景:清洗用户输入:

# 用户输入可能带多余空格
user_name = input('请输入用户名:').strip()
# 避免因空格导致的判断错误
if user_name == 'admin':
    print('欢迎管理员登录')
else:
    print(f'欢迎{user_name}登录')

填充对齐:ljust()/rjust()/center()/zfill()

s = '123'
# ljust(width, fillchar):左对齐,右侧填充指定字符(默认空格)
print(s.ljust(5, '-'))  # 输出:123--
# rjust(width, fillchar):右对齐,左侧填充指定字符
print(s.rjust(5, '-'))  # 输出:--123
# center(width, fillchar):居中对齐,两侧填充指定字符
print(s.center(5, '-'))  # 输出:-123-
# zfill(width):右对齐,左侧填充0(适合数字补零)
print(s.zfill(5))  # 输出:00123

实战场景:格式化输出表格:

# 格式化输出用户列表
users = [('张三', 25), ('李四', 26), ('王五', 24)]
# 表头
print('姓名'.ljust(10) + '年龄'.ljust(5))
print('-' * 15)
# 内容
for name, age in users:
    print(name.ljust(10) + str(age).ljust(5))
# 输出:
# 姓名        年龄  
# ---------------
# 张三        25   
# 李四        26   
# 王五        24   

5. 其他实用操作:编码解码、格式化

编码与解码:encode()/decode()

字符串编码(str→bytes):encode(encoding=‘utf-8’);字节串解码(bytes→str):decode(encoding=‘utf-8’),适合网络传输、文件读写场景。

s = 'Python编程'
# 编码为UTF-8字节串
bytes_s = s.encode('utf-8')
print(bytes_s)  # 输出:b'Python\xe7\xbc\x96\xe7\xa8\x8b'

# 解码为字符串
str_s = bytes_s.decode('utf-8')
print(str_s)  # 输出:Python编程

# 避免解码错误(指定errors参数)
# bytes_s2 = b'Python\xe7\xbc'
# print(bytes_s2.decode('utf-8'))  # 报错:UnicodeDecodeError
# print(bytes_s2.decode('utf-8', errors='ignore'))  # 忽略错误:Python
# print(bytes_s2.decode('utf-8', errors='replace'))  # 替换错误:Python�

字符串格式化:format()/f-string(推荐)

用于动态拼接字符串,f-string(Python 3.6+)语法更简洁、效率更高,推荐优先使用。

# 1. format()方法
name = '张三'
age = 25
s1 = '我叫{},今年{}岁'.format(name, age)
print(s1)  # 输出:我叫张三,今年25岁

# 2. f-string(推荐)
s2 = f'我叫{name},今年{age}岁'
print(s2)  # 输出:我叫张三,今年25岁

# 进阶:格式化数字
salary = 12345.678
# 保留2位小数
print(f'月薪:{salary:.2f}')  # 输出:月薪:12345.68
# 转为百分比格式
print(f'增长率:{0.123:.2%}')  # 输出:增长率:12.30%

四、字符串实战场景:4个高频案例

1. 场景1:文本清洗(去除无效字符、标准化格式)

# 清洗用户评论(去除首尾空格、特殊字符,转为小写)
comments = [
    '   这个产品很好用!!!   ',
    '###价格有点贵...',
    '  推荐购买~~  ',
    '质量一般,不推荐!'
]

clean_comments = []
for comment in comments:
    # 去除首尾空格和'#'
    clean1 = comment.strip().strip('#')
    # 去除末尾的特殊字符(!、~、...)
    clean2 = clean1.rstrip('!~.')
    # 转为小写
    clean3 = clean2.lower()
    clean_comments.append(clean3)

print(clean_comments)
# 输出:['这个产品很好用', '价格有点贵', '推荐购买', '质量一般,不推荐']

2. 场景2:统计文本中关键词出现次数

# 统计一段文本中"Python"出现的次数(忽略大小写)
text = '''Python is a popular programming language. 
Many developers love Python because it's easy to learn. 
Python can be used for web development, data analysis, and AI.'''

# 转为小写,统一格式
text_lower = text.lower()
# 统计次数
count = text_lower.count('python')
print(f'"Python"出现次数:{count}')  # 输出:"Python"出现次数:3

3. 场景3:验证邮箱格式(基础版)

def is_valid_email(email):
    # 基础验证:包含@和.,且@在.之前
    if '@' in email and '.' in email:
        # 获取@和.的位置
        at_index = email.find('@')
        dot_index = email.rfind('.')
        # @不能在开头或结尾,.不能在@之前,且.不能在结尾
        if at_index > 0 and dot_index > at_index + 1 and dot_index < len(email) - 1:
            return True
    return False

# 测试
print(is_valid_email('zhangsan@example.com'))  # 输出:True
print(is_valid_email('zhangsan.example.com'))  # 输出:False
print(is_valid_email('zhangsan@.com'))  # 输出:False
print(is_valid_email('@example.com'))  # 输出:False

4. 场景4:字符串反转(判断回文串)

# 回文串:正读和反读一致(如"上海自来水来自海上")
def is_palindrome(s):
    # 清洗字符串:去除空格,转为小写
    clean_s = s.replace(' ', '').lower()
    # 反转字符串(切片语法:[::-1])
    reversed_s = clean_s[::-1]
    return clean_s == reversed_s

# 测试
print(is_palindrome('上海自来水来自海上'))  # 输出:True
print(is_palindrome('Hello Python'))  # 输出:False
print(is_palindrome('A man a plan a canal Panama'))  # 输出:True

五、新手必避的5个字符串坑

  1. 不可变性导致的修改错误:直接修改字符串单个字符会报错(如s[0] = 'H');解决方法:用切片、拼接或replace()生成新字符串。
  2. find()与index()的混淆:子串未找到时,find()返回-1,index()报错;不确定子串是否存在时,优先用find()。
  3. join()方法的参数类型错误:join()的可迭代对象元素必须是字符串,否则报错;解决方法:先通过生成器表达式将元素转为字符串。
  4. 转义字符的干扰:字符串中的\n、\t等会被自动解析,导致路径、正则表达式等场景出错;解决方法:用原始字符串(前缀r)。
  5. 字符串拼接的效率问题:频繁用"+"拼接字符串效率低(创建多个临时对象);解决方法:用join()或f-string。

六、总结:字符串常用方法速查表与核心原则

为方便快速查阅,整理字符串常用方法速查表:

功能分类方法/语法核心作用关键提示
查找与替换find(sub)查找子串首次位置,未找到返回-1不报错,适合不确定子串存在场景
index(sub)查找子串首次位置,未找到报错确定子串存在时使用
count(sub)统计子串出现次数未找到返回0
replace(old, new, count)替换子串,返回新字符串不修改原字符串
分割与拼接split(sep, maxsplit)按分隔符拆分字符串默认按空白字符拆分
rsplit(sep, maxsplit)从右侧按分隔符拆分适合路径、文件名拆分
splitlines()按换行符拆分可保留换行符
join(iterable)合并序列为字符串元素必须是字符串,高效拼接
判断与转换upper()/lower()转换为全大写/全小写返回新字符串
capitalize()/title()首字母大写/每个单词首字母大写适合格式化文本
isalpha()/isdigit()判断全为字母/数字中文视为字母
startswith(prefix)判断是否以指定前缀开头支持元组传入多个前缀
endswith(suffix)判断是否以指定后缀结尾支持元组传入多个后缀
f-string字符串格式化简洁高效,Python3.6+支持
修剪与填充strip()/lstrip()/rstrip()去除首尾/左侧/右侧空白/指定字符不修改原字符串
ljust()/rjust()左对齐/右对齐,填充字符指定最终字符串长度
center()居中对齐,填充字符适合格式化表格
zfill()左侧填充0适合数字补零
其他操作encode()/decode()字符串编码/字节串解码默认UTF-8编码
[::-1]字符串反转切片语法,简洁高效

字符串核心使用原则: 

字符串是Python开发的基础,掌握以上方法和技巧,能轻松应对文本处理、用户交互等大部分场景。多结合实战案例练习,就能熟练驾驭字符串的各种用。

以上就是Python字符串String方法全解:新手必学常用操作和实战案例的详细内容,更多关于Python字符串String常用方法的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文