当前位置:首页>python>Python字符串分割与连接——拆分与合并的利器

Python字符串分割与连接——拆分与合并的利器

  • 2026-10-02 21:27:32
Python字符串分割与连接——拆分与合并的利器

一、什么是字符串分割与连接?

  • • 分割(split):将一个字符串按照指定的分隔符拆分成多个子串,结果通常是一个列表。
  • • 连接(join):将一个可迭代对象中的多个字符串合并成一个新字符串,中间可以插入指定的分隔符。

这两个操作互为逆过程,是处理文本数据时最常用的技能之一。

# 分割
s = "apple,banana,orange"
fruits = s.split(",")
print(fruits)  # ['apple', 'banana', 'orange']

# 连接
new_s = "-".join(fruits)
print(new_s)   # "apple-banana-orange"

二、字符串分割方法

2.1 split() —— 按指定分隔符分割

split(sep=None, maxsplit=-1) 是 Python 中最常用的分割方法。

  • • sep:分隔符,可以是一个字符串。默认为 None,表示按任意空白字符(空格、换行、制表符等)分割,并且会忽略连续空白。
  • • maxsplit:最大分割次数,默认为 -1(即无限制)。如果指定 maxsplit,则最多分割成 maxsplit+1 个部分。

示例 1:默认按空白分割

text = "Hello   World  Python"
print(text.split())  # ['Hello', 'World', 'Python']

示例 2:指定分隔符

data = "apple,banana,orange"
print(data.split(","))   # ['apple', 'banana', 'orange']

示例 3:限制分割次数

s = "a,b,c,d,e"
print(s.split(",", 2))   # ['a', 'b', 'c,d,e'] 只分割前两个逗号

注意: 如果分隔符在字符串开头或结尾,结果中可能包含空字符串。

s = ",a,,b,"
print(s.split(","))      # ['', 'a', '', 'b', '']

2.2 rsplit() —— 从右侧开始分割

rsplit(sep=None, maxsplit=-1) 与 split() 类似,但从字符串的右侧开始分割。常用于处理路径或限制从右边分割的次数。

path = "/home/user/docs/file.txt"
# 从右边分割一次,获取目录和文件名
dir_part, file_part = path.rsplit("/", 1)
print(dir_part)   # "/home/user/docs"
print(file_part)  # "file.txt"

2.3 splitlines() —— 按行分割

splitlines([keepends]) 按换行符分割字符串,返回一个包含各行的列表。

  • • keepends:布尔值,默认为 False。如果为 True,则保留行尾的换行符。
text = "第一行\n第二行\r\n第三行"
print(text.splitlines())      # ['第一行', '第二行', '第三行']
print(text.splitlines(True))  # ['第一行\n', '第二行\r\n', '第三行']

2.4 partition() 和 rpartition() —— 分割为三部分

partition(sep) 在字符串中第一次出现分隔符的位置进行分割,返回一个三元组 (head, sep, tail)。如果找不到分隔符,则返回 (原字符串, '', '')。

s = "username:password"
print(s.partition(":"))   # ('username', ':', 'password')

# 找不到分隔符
print(s.partition("="))   # ('username:password', '', '')

rpartition(sep) 是从右侧第一次出现的位置分割。

url = "https://www.example.com/index.html"
print(url.rpartition("/"))  # ('https://www.example.com', '/', 'index.html')

这两个方法非常适合需要同时获取分隔符和两侧内容的场景,比如解析键值对。


三、字符串连接方法

3.1 join() —— 连接可迭代对象中的字符串

join() 是字符串的一个方法,语法为:分隔符.join(可迭代对象)。

  • • 可迭代对象中的每个元素必须是字符串。
  • • 方法返回一个新字符串,将元素用指定的分隔符连接起来。
words = ["Hello", "World", "Python"]
s = " ".join(words)
print(s)   # "Hello World Python"

# 用逗号连接
tags = ["python", "编程", "教程"]
print(",".join(tags))   # "python,编程,教程"

注意:join() 的性能远高于使用 + 在循环中拼接字符串,因为 join() 一次性分配内存。

3.2 使用 + 连接(不推荐用于大量拼接)

对于少量已知字符串,可以用 +:

s = "Hello" + " " + "World"# "Hello World"

但在循环中频繁使用 + 会导致性能下降(因为字符串不可变,每次都要创建新字符串)。

3.3 使用格式化方法间接连接

f-string、format() 等方法也可以用于拼接,但本质上还是格式化的范畴。


四、实战案例

案例1:解析 CSV 行

csv_line = "张三,25,北京"
fields = csv_line.split(",")
name, age, city = fields
print(f"姓名:{name},年龄:{age},城市:{city}")

案例2:将列表合并为逗号分隔的字符串

items = ["苹果", "香蕉", "橙子"]
result = ", ".join(items)
print(result)  # "苹果, 香蕉, 橙子"

案例3:处理多行字符串(保留行号)

text = """第一行
第二行
第三行"""

lines = text.splitlines()
for i, line inenumerate(lines, 1):
print(f"{i}: {line}")

案例4:解析 URL 参数

url = "https://example.com/search?q=python&page=2&sort=desc"
query_part = url.split("?")[1]          # 提取 ? 后面的部分
pairs = query_part.split("&")           # 按 & 分割
params = {}
for pair in pairs:
    key, value = pair.split("=")
    params[key] = value
print(params)  # {'q': 'python', 'page': '2', 'sort': 'desc'}

案例5:路径处理(使用 rsplit)

full_path = "/home/user/docs/report.txt"
folder, filename = full_path.rsplit("/", 1)
print(f"文件夹:{folder}")   # /home/user/docs
print(f"文件名:{filename}") # report.txt

案例6:使用 partition 解析键值对

line = "name:张三"
key, sep, value = line.partition(":")
if sep:
print(f"键:{key},值:{value}")
else:
print("格式错误")

案例7:将列表中的数字转为字符串并用逗号连接

numbers = [1, 2, 3, 4]
# 需要先将数字转为字符串
str_numbers = [str(n) for n in numbers]
result = ", ".join(str_numbers)
print(result)  # "1, 2, 3, 4"

案例8:去除多余空白并重组句子

sentence = "Python   is   awesome"
words = sentence.split()        # 按空白分割,自动处理连续空格
clean_sentence = " ".join(words)
print(clean_sentence)           # "Python is awesome"

五、注意事项与常见错误

  1. 1. split() 默认行为:无参时按任意空白分割且忽略连续空白,与 split(' ') 不同,后者按单个空格分割且会保留空字符串。
  2. 2. join() 的参数必须是字符串可迭代对象:如果包含非字符串,会抛出 TypeError。
  3. 3. 空字符串处理:split 遇到连续分隔符会产生空字符串;join 对空列表返回空字符串。
  4. 4. 性能:在循环中拼接大量字符串应使用列表收集然后用 join,避免 +=。
  5. 5. partition 与 split 的区别:partition 只分割一次且返回三元组,适合确定有分隔符的场景;split 可分割多次返回列表。
  6. 6. 不可变性:所有分割和连接方法都返回新字符串或列表,原字符串不变。

六、总结

方法
作用
返回值
split()
按分隔符分割字符串
列表
rsplit()
从右侧按分隔符分割
列表
splitlines()
按行分割
列表
partition()
第一次出现处分隔为三部分
三元组
rpartition()
最后一次出现处分隔为三部分
三元组
join()
用分隔符连接字符串序列
字符串

掌握这些方法,就能在文本处理中游刃有余地拆分和重组字符串。无论是解析文件、处理用户输入,还是构建输出,它们都是不可或缺的工具。

最新文章

随机文章