Python中字符串分隔与连接函数
文章目录
- 一、分隔
- 1. `split(sep=None, maxsplit=-1)`
- 2. `rsplit(sep=None, maxsplit=-1)`
- 3. `splitlines([keepends=False])`
- 4. `partition(sep)`
- 5. `rpartition(sep)`
- 6. 正则表达式分割(`re.split()`)
- 关键区别总结:
- 示例场景:
- 二、连接
- Python 字符串 `join()` 方法详解
- 1. 基本语法
- 2. 核心特点
- (1) 高效性
- (2) 必须全为字符串
- (3) 连接符灵活
- 3. 使用示例
- (1) 拼接列表/元组
- (2) 生成 CSV 行
- (3) 路径拼接
- (4) 多行文本合并
- 4. 常见问题
- (1) 非字符串元素报错
- (2) 可迭代对象为空
- (3) 性能对比
- 其他
- 1. + 运算符(直接拼接)
- 2. f-strings(Python 3.6+,格式化拼接)
- 3. format() 方法(兼容旧版本)
- 4. 字符串重复(* 运算符)
- 5. 与其他拼接方法对比
- 6. 总结
- 经典代码模板
在 Python 中,字符串的分割(分隔)操作主要通过以下几个方法实现,用于将字符串拆分为多个部分:
一、分隔
1. split(sep=None, maxsplit=-1)
- 功能:按分隔符
sep
将字符串拆分为列表。 - 参数:
sep
:分隔符(默认为空白字符,连续空白字符视为一个分隔符)。maxsplit
:最大分割次数(默认-1
表示不限制)。
- 示例:
s = "apple,banana,orange" print(s.split(",")) # 输出: ['apple', 'banana', 'orange'] print("a b c".split()) # 输出: ['a', 'b', 'c'] (默认按空白分割) print(s.split(",", 1)) # 输出: ['apple', 'banana,orange'] (只分割1次)
2. rsplit(sep=None, maxsplit=-1)
- 功能:从字符串右侧开始分割,行为类似
split()
。 - 示例:
s = "apple,banana,orange" print(s.rsplit(",", 1)) # 输出: ['apple,banana', 'orange']
3. splitlines([keepends=False])
- 功能:按行分隔符(如
\n
、\r\n
等)拆分为列表。 - 参数:
keepends
:是否保留行分隔符(默认False
)。
- 示例:
s = "line1\nline2\r\nline3" print(s.splitlines()) # 输出: ['line1', 'line2', 'line3'] print(s.splitlines(True)) # 输出: ['line1\n', 'line2\r\n', 'line3']
4. partition(sep)
- 功能:在字符串中首次遇到分隔符
sep
时,将其拆分为三部分:(分隔符前, 分隔符, 分隔符后)
。 - 若未找到分隔符:返回
(原字符串, "", "")
。 - 示例:
s = "apple,banana,orange" print(s.partition(",")) # 输出: ('apple', ',', 'banana,orange') print(s.partition(";")) # 输出: ('apple,banana,orange', '', '')
5. rpartition(sep)
- 功能:类似
partition()
,但从字符串右侧开始查找分隔符。 - 示例:
s = "apple,banana,orange" print(s.rpartition(",")) # 输出: ('apple,banana', ',', 'orange')
6. 正则表达式分割(re.split()
)
- 功能:通过正则表达式灵活分割字符串(需导入
re
模块)。 - 示例:
import re s = "apple123banana456orange" print(re.split(r"\d+", s)) # 输出: ['apple', 'banana', 'orange']
Python 的 re.split()
关键区别总结:
方法 | 方向 | 返回结果 | 适用场景 |
---|---|---|---|
split() | 从左 | 列表(不含分隔符) | 通用分割 |
rsplit() | 从右 | 列表(不含分隔符) | 从右限制分割次数 |
splitlines() | - | 按行分割的列表 | 多行文本处理 |
partition() | 首次 | 三元组(包含分隔符) | 提取分隔符前后部分 |
rpartition() | 末次 | 三元组(包含分隔符) | 从右提取分隔符前后 |
re.split() | - | 支持正则的列表 | 复杂分隔符(如多个符号) |
示例场景:
# 分割 CSV 文件行(处理多余空格)
csv_line = " apple, banana , orange "
items = [s.strip() for s in csv_line.split(",")]
print(items) # 输出: ['apple', 'banana', 'orange']
# 提取文件名和扩展名
filename = "data.txt"
name, _, ext = filename.partition(".")
print(f"文件名: {name}, 扩展名: {ext}") # 输出: 文件名: data, 扩展名: txt
二、连接
Python 字符串 join()
方法详解
join()
是 Python 中最高效的字符串拼接方法,特别适合处理列表、元组等可迭代对象中的多个字符串。它的核心功能是用指定的字符串作为“胶水”,将一个可迭代对象的所有元素拼接成一个新字符串。
1. 基本语法
str.join(iterable)
str
:作为连接符的字符串(可以是空字符串""
或其他任意字符串)。iterable
:可迭代对象(如列表、元组、集合等),其元素必须全部是字符串类型。
返回值:拼接后的新字符串(原字符串和可迭代对象不会被修改)。
2. 核心特点
(1) 高效性
- 比
+
运算符快:join()
在底层优化了内存分配,适合拼接大量字符串。 - 避免临时对象:循环中使用
+
会频繁创建临时字符串对象,而join()
一次性完成拼接。
(2) 必须全为字符串
- 如果可迭代对象中包含非字符串元素(如数字),会抛出
TypeError
,需提前转换:nums = [1, 2, 3] # 错误示例:",".join(nums) # TypeError! # 正确做法: ", ".join(map(str, nums)) # 输出 "1, 2, 3"
(3) 连接符灵活
- 连接符可以是任意字符串(包括空字符串、空格、换行符等):
"-".join(["a", "b", "c"]) # 输出 "a-b-c" "".join(["a", "b", "c"]) # 输出 "abc" "\n".join(["line1", "line2"]) # 输出多行文本
3. 使用示例
(1) 拼接列表/元组
words = ["Python", "is", "powerful"]
sentence = " ".join(words) # 输出 "Python is powerful"
(2) 生成 CSV 行
data = ["Alice", "25", "Engineer"]
csv_line = ",".join(data) # 输出 "Alice,25,Engineer"
(3) 路径拼接
parts = ["home", "user", "documents"]
path = "/".join(parts) # 输出 "home/user/documents"
(4) 多行文本合并
lines = ["First line", "Second line", "Third line"]
text = "\n".join(lines) # 输出三行文本,每行换行
4. 常见问题
(1) 非字符串元素报错
mixed = ["a", 123, "b"]
# 错误!TypeError: sequence item 1: expected str, found int
# 需先转换:
corrected = ", ".join(map(str, mixed)) # 输出 "a, 123, b"
(2) 可迭代对象为空
empty_list = []
result = "-".join(empty_list) # 输出 "" (空字符串)
(3) 性能对比
# 低效做法(循环中用 +)
result = ""
for s in ["a", "b", "c"]:
result += s # 每次循环创建新字符串
# 高效做法(join())
result = "".join(["a", "b", "c"])
其他
1. + 运算符(直接拼接)
s1 = "Hello"
s2 = "World"
result = s1 + " " + s2 # "Hello World"
特点:
- 简单直观,但性能较差(频繁拼接时会产生临时对象)。
- 适用场景:少量字符串拼接。
2. f-strings(Python 3.6+,格式化拼接)
name = "Alice"
age = 25
result = f"My name is {name}, age {age}." # "My name is Alice, age 25."
特点:
- 直接嵌入变量或表达式,代码可读性高。 ◦
- 运行时动态计算。
- 适用场景:需要混合变量和固定文本的拼接。
3. format() 方法(兼容旧版本)
result = "{} {}".format("Hello", "World") # "Hello World"
特点:
- 兼容 Python 2.7/3.x,功能强大(支持格式化控制)。
- 适用场景:需要复杂格式化的旧代码。
4. 字符串重复(* 运算符)
result = "ha" * 3 # "hahaha"
特点:
-快速生成重复字符串。
5. 与其他拼接方法对比
方法 | 性能 | 适用场景 | 限制 |
---|---|---|---|
join() | ★★★★★ | 大量字符串拼接、列表/迭代对象 | 元素必须全为字符串 |
f-strings | ★★★★☆ | 动态变量嵌入、少量拼接 | Python 3.6+ 才支持 |
+ 运算符 | ★★☆☆☆ | 简单、少量拼接 | 频繁拼接性能差 |
format() | ★★★☆☆ | 复杂格式化需求 | 代码稍冗长 |
6. 总结
- 何时用
join()
?
需要高效拼接列表、元组等可迭代对象中的字符串时。 - 注意事项
- 确保所有元素是字符串(否则先用
map(str, iterable)
转换)。 - 连接符可以是任意字符串(如
""
、"-"
、"\n"
)。 - 避免在循环中用
+
,优先选择join()
。
- 确保所有元素是字符串(否则先用
经典代码模板
# 拼接列表中的字符串(用逗号分隔)
items = ["apple", "banana", "orange"]
result = ", ".join(items) # "apple, banana, orange"
# 拼接数字需先转字符串
numbers = [1, 2, 3]
result = "|".join(map(str, numbers)) # "1|2|3"
掌握 join()
能显著提升字符串处理效率!
根据需求选择合适的方法即可!😺 😸 😹