首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python split() 方法完整教學:字串分割、分隔符、最大分割數與實戰技巧

     編輯:更多程式設計知識

split() 是 Python 字串最核心的分割方法,將字串依指定分隔符切分為子字串列表。支援自訂分隔符、限制最大分割次數、預設按任意空白字元分割(並自動忽略連續空白)。是資料解析、文字處理、命令列參數分析的基石工具。

語法與參數


str.split(sep=None, maxsplit=-1)
  • sep(可選):分隔符字串。預設 None 表示按任意空白字元分割(空格、\t、\n 等),並自動忽略連續/首尾空白。
  • maxsplit(可選):最大分割次數。預設 -1 表示無限制。分割後列表長度最大為 maxsplit+1。

回傳值

回傳 字串列表,包含所有分割出的子字串。

基本範例


#!/usr/bin/python
str = "Line1-abcdef nLine2-abc nLine4-abcd"
print(str.split())
print(str.split(' ', 1))

執行結果:


['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', 'nLine2-abc nLine4-abcd']

核心特性詳解

1. 預設行為:按空白字元分割(最常用、最強大)


# 連續空白視為單一分隔符
print("a  b   c".split())     # ['a', 'b', 'c']

# 首尾空白自動忽略
print("  a b  ".split())      # ['a', 'b']

# 所有空白字元:空格、tab、換行、回車
print("a\tb\nc\r d".split())  # ['a', 'b', 'c', 'd']

# 空字串或純空白 → 空列表
print("".split())             # []
print("   ".split())          # []

2. 指定分隔符(sep 參數)


# 單一字元
print("a,b,c".split(','))     # ['a', 'b', 'c']

# 多字元分隔符
print("a::b::c".split('::'))  # ['a', 'b', 'c']

# 分隔符不存在 → 原字串成單一元素列表
print("abc".split(','))       # ['abc']

# 連續分隔符產生空字串元素(與預設行為不同!)
print("a,,b".split(','))      # ['a', '', 'b']
print(",a,".split(','))       # ['', 'a', '']

3. 限制最大分割次數(maxsplit 參數)


# 只分割前 1 次
print("a,b,c,d".split(',', 1))   # ['a', 'b,c,d']

# 只分割前 2 次
print("a,b,c,d".split(',', 2))   # ['a', 'b', 'c,d']

# 從右側限制分割 → rsplit()
print("a,b,c,d".rsplit(',', 1))  # ['a,b,c', 'd']

# maxsplit=0 → 不分割
print("a,b,c".split(',', 0))     # ['a,b,c']

split() vs rsplit() vs splitlines() vs re.split()

方法方向分隔符最大分割適用場景
split(sep, maxsplit)左→右字串/None(空白)支援通用分割、CSV 解析、參數拆解
rsplit(sep, maxsplit)右→左字串/None(空白)支援從右側限制分割、路徑處理
splitlines(keepends)行邊界所有換行符否多行文字、跨平台換行
re.split(pattern, maxsplit)左→右正則表達式支援複雜模式、多種分隔符、條件分割

進階應用場景

1. CSV 簡易解析(不含引號逸出)


line = 'apple,banana,"orange,juice",grape'
# 簡單 split 會錯誤切分引號內逗號
# 正確用 csv 模組
import csv
reader = csv.reader([line])
print(next(reader))  # ['apple', 'banana', 'orange,juice', 'grape']

2. 命令列參數解析(shlex 更完整)


cmd = 'python script.py --name "John Doe" --age 30'
# 簡單 split 會切破帶空格的參數
import shlex
print(shlex.split(cmd))
# ['python', 'script.py', '--name', 'John Doe', '--age', '30']

3. 路徑處理(os.path / pathlib 更推薦)


path = "/home/user/documents/file.txt"
# 取得檔名
filename = path.split('/')[-1]  # 'file.txt'
# 取得目錄
directory = '/'.join(path.split('/')[:-1])  # '/home/user/documents'

# 正確跨平台做法
from pathlib import Path
p = Path(path)
print(p.name)      # file.txt
print(p.parent)    # /home/user/documents

4. 解析 key=value 格式


def parse_kv_pairs(text, sep=';', kv_sep='='):
    """解析 'a=1;b=2;c=3' 格式"""
    result = {}
    for pair in text.split(sep):
        if kv_sep in pair:
            k, v = pair.split(kv_sep, 1)  # maxsplit=1 只分第一個 =
            result[k.strip()] = v.strip()
    return result

print(parse_kv_pairs("name=John;age=30;city=New York"))
# {'name': 'John', 'age': '30', 'city': 'New York'}

5. 保留分隔符(正則 lookahead/lookbehind)


import re
# 保留分隔符於結果中
text = "a,b;c,d"
# 分隔符為 , 或 ;
print(re.split(r'([,;])', text))  # ['a', ',', 'b', ';', 'c', ',', 'd']

常見陷阱與注意事項

陷阱說明正確做法
預設分割 vs 指定空格分割split() 忽略連續空白;split(' ') 保留空字串預設用 split(),指定分隔符用 split(sep)
連續分隔符產生空字串"a,,b".split(',') → ['a', '', 'b']後續處理過濾:[x for x in s.split(',') if x]
maxsplit 計算邏輯maxsplit=1 → 2 個元素;maxsplit=n → n+1 個元素記住列表長度 = maxsplit + 1
分隔符為空字串split('') → ValueError不可用空字串分隔,單字元用 list(s)
大小寫敏感分隔符大小寫敏感需統一大小寫或用 re.split(flags=re.I)

效能特性

  • 時間複雜度:O(n),n 為字串長度
  • 空間複雜度:O(n),建立列表與子字串
  • CPython C 層級實作,極快
  • 大量分割建議:預估列表大小、避免重複分割同一字串

split() 家族總覽


s = "a,b,c,d"

s.split(',')        # ['a', 'b', 'c', 'd']
s.split(',', 2)     # ['a', 'b', 'c,d']
s.rsplit(',', 1)    # ['a,b,c', 'd']
s.split(',', 0)     # ['a,b,c,d']
s.split()           # ['a,b,c,d']  無空白不分割
" a b ".split()     # ['a', 'b']
" a b ".split(' ')  # ['', 'a', 'b', '']

總結

split(sep=None, maxsplit=-1) 是字串分割的核心方法:預設按空白智能分割(忽略連續/首尾)、指定分隔符精確切分、maxsplit 限制分割次數。核心優勢:語法簡潔、預設行為智能、效能極佳。掌握 sep=None 與 sep=' ' 差異、maxsplit 計算邏輯、rsplit() 反向分割、splitlines() 行分割、re.split() 正則分割,能靈活應對 CSV 解析、參數處理、路徑拆解、文字分析等各類實務場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved