Python 的 split() 函數是什麼?從基礎到應用與實戰範例全面解析!

目次

1. 前言

在使用 Python 進行資料處理或字串操作時,split() 函數是非常常見且實用的方法。本文將深入介紹 Python 的 split() 函數,從基礎概念到進階用法,並搭配程式碼範例,幫助初學者也能輕鬆理解。

什麼是 Python 的 split() 函數?

split() 函數是 Python 的標準字串方法之一,用於將字串依照指定的分隔符號切割,並回傳一個列表。例如,可以依照逗號、空格等符號進行分割。

text = "Python,Java,C++"
words = text.split(",")
print(words)  # 輸出: ['Python', 'Java', 'C++']

如上例所示,使用 split() 可以將以逗號分隔的字串轉換成列表。

為什麼 split() 函數這麼重要?

split() 函數可以應用在許多不同的情境中,例如:

  • 處理使用者輸入資料
  • 解析 CSV 檔案
  • 分析日誌(Log)檔案
  • 處理包含多個值的字串

在學習程式設計的過程中,split() 是非常重要的一個工具,建議好好掌握它的使用方式。

2. split() 函數的基礎用法(給初學者)

本節將介紹 Python 中 split() 函數的基本使用方法。為了讓初學者也能輕鬆理解,我們會搭配範例程式碼來說明。

2-1. split() 函數的基本語法

split() 函數的基本語法如下:

字串.split(分隔符號, 最大分割次數)
參數名稱說明
分隔符號用來分割字串的依據(若省略,預設為空白字元)
最大分割次數最多可以分割幾次(若省略,會分割到無法再分)

基本用法範例

以下範例中,我們使用逗號(,)作為分隔符號:

text = "Python,Java,C++"
words = text.split(",")
print(words)  # 輸出: ['Python', 'Java', 'C++']

未指定分隔符號時的行為

如果省略 split() 的參數,預設會以空白字元(空格、Tab、換行) 為基準進行分割:

text = "Python Java C++"
print(text.split())  # 輸出: ['Python', 'Java', 'C++']

即使有多個空白,也會自動忽略並正確分割:

text = "Python   Java  C++"
print(text.split())  # 輸出: ['Python', 'Java', 'C++']

2-2. 指定 maxsplit(限制分割次數)

透過指定 split() 的第二個參數 maxsplit,可以限制最多分割的次數

text = "apple banana cherry date"
print(text.split(" ", 2))  # 輸出: ['apple', 'banana', 'cherry date']

在這個範例中,最多只分割兩次,因此列表中的最後一個元素會包含剩下的字串。

想要移除字串前後的多餘空白時

可以搭配 strip() 使用,去除字串開頭與結尾的空白字元:

text = "  Python Java C++  "
print(text.strip().split())  # 輸出: ['Python', 'Java', 'C++']
年収訴求

3. split() 的進階用法(中階程度)

從本節開始,我們將介紹 Python 中 split() 函數的進階應用。不僅限於單一分隔符,還會說明如何使用多個分隔符進行切割,以及如何使用 rsplit()

3-1. 依特定字串進行分割

在先前的基本用法中,我們使用單一分隔符(例如 ","" ")來切割字串。不過,在某些情況下,也會遇到使用不同分隔符,像是換行或 Tab 的情境。

以逗號(,)為分隔符

text = "apple,banana,grape"
print(text.split(","))  # 輸出: ['apple', 'banana', 'grape']

以換行符號為分隔

若使用換行符作為分隔,可以將多行文字轉換為列表:

text = "apple\nbanana\ngrape"
print(text.split("\n"))  # 輸出: ['apple', 'banana', 'grape']

以 Tab(\t)為分隔

在處理以 Tab 分隔的資料(如 TSV 檔案)時非常實用:

text = "apple\tbanana\tgrape"
print(text.split("\t"))  # 輸出: ['apple', 'banana', 'grape']

3-2. 使用 re.split() 進行多重分隔

標準的 split() 函數只能指定一種分隔符。如果想用多種不同的分隔符(如逗號、分號、空格)來切割字串,請使用 re.split()

指定多個分隔符的範例

import re

text = "apple;banana,grape orange"
words = re.split(r"[;, ]+", text)
print(words)  # 輸出: ['apple', 'banana', 'grape', 'orange']

重點說明:

  • re.split(r"[;, ]+", text) 中的 r"[;, ]+" 是正規表達式,代表可用分號、逗號或空格作為分隔。
  • + 代表連續的分隔符會視為一個處理,避免產生空字串。

3-3. 從右側進行分割:rsplit()

一般的 split() 是從字串的左側開始分割,而 rsplit() 則是從右側開始。這在處理檔案路徑或網址時特別有用。

範例:比較 split()rsplit()

text = "home/user/documents/file.txt"

print(text.split("/", 2))   # 輸出: ['home', 'user', 'documents/file.txt']
print(text.rsplit("/", 2))  # 輸出: ['home/user', 'documents', 'file.txt']

split():從左邊開始分割兩次,最後的部分會包含剩餘字串。
rsplit():從右邊開始分割兩次,最前面的部分會包含剩餘字串。

這種方式在取得資料夾路徑或檔名時特別實用。

4. 實際應用範例(實戰篇)

在本節中,我們將介紹如何在 實際的程式開發中 使用 split() 函數。特別是針對 CSV 資料處理、使用者輸入解析、日誌檔案分析 等實務上常見的情境進行說明。

4-1. 處理 CSV 資料

CSV(Comma-Separated Values) 是以逗號(,)為分隔的資料格式。使用 Python 的 split() 可以簡單地將資料切割成清單處理。

分割一行 CSV 資料

csv_line = "2023-01-01,Tokyo,25"
data = csv_line.split(",")
print(data)  # 輸出: ['2023-01-01', 'Tokyo', '25']

這種方法適合處理小型 CSV 資料。若處理大量資料,建議使用 csv 模組

使用 csv.reader 處理較複雜的情境

import csv

csv_data = """2023-01-01,Tokyo,25
2023-01-02,Osaka,27
2023-01-03,Nagoya,26"""

lines = csv_data.split("\n")  # 依行分割
reader = csv.reader(lines)

for row in reader:
    print(row)  # 輸出: ['2023-01-01', 'Tokyo', '25'] 等

重點說明:

  • 使用 split("\n") 將資料按行切割
  • 使用 csv.reader() 可以正確處理逗號分隔格式
  • 如果處理的是實體 CSV 檔案,建議搭配 open() 使用

4-2. 分析使用者輸入

當使用者透過表單或終端輸入資料時,split() 可協助我們將輸入內容轉為清單進行後續處理。

範例:將使用者輸入轉為列表

user_input = "Alice | 30 | Developer"
data = user_input.split(" | ")
print(data)  # 輸出: ['Alice', '30', 'Developer']

重點說明:

  • 使用 " | " 作為分隔符,可以正確分割格式化的輸入
  • 轉為清單後,後續的資料處理更方便

範例:處理空格分隔的輸入

user_input = input("請輸入姓名與年齡(例如:Alice 30):")
data = user_input.split()
print(f"姓名: {data[0]}, 年齡: {data[1]}")

執行範例:

請輸入姓名與年齡(例如:Alice 30):Bob 25
姓名: Bob, 年齡: 25

注意事項:

  • 需先確保使用者輸入的格式是一致的
  • 可搭配 try-except 做例外處理,提升穩定性

4-3. 解析日誌檔案

在分析伺服器日誌時,可以利用 split() 函數擷取 IP 位址、時間戳記、請求方法 等資訊。

範例:解析 Apache 訪問日誌

log_entry = "192.168.0.1 - - [10/Feb/2024:14:32:10 +0900] GET /index.html"

log_parts = log_entry.split(" ")
ip_address = log_parts[0]
timestamp = log_parts[3].strip("[]")  # 去除中括號
request_method = log_parts[5].strip('"')  # 去除引號
url = log_parts[6]

print(f"IP 位址: {ip_address}")
print(f"時間戳記: {timestamp}")
print(f"請求方法: {request_method}")
print(f"URL: {url}")

執行結果:

IP 位址: 192.168.0.1
時間戳記: 10/Feb/2024:14:32:10 +0900
請求方法: GET
URL: /index.html

重點說明:

  • 使用 " "(空格)進行分割以擷取欄位
  • 可透過 strip("[]")strip('"') 移除多餘符號
  • 可應用於日誌分析、自動化報表等場景
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. split() 函數與其他相關方法

雖然 split() 是處理字串分割的常用方法,但 Python 還有其他功能類似的相關方法。根據不同的情境,選擇最合適的方法會讓程式更有效率。

本節將介紹 split() 與其他常見的字串分割方法,例如 splitlines()partition()rsplit()

5-1. splitlines()(根據換行符號分割)

splitlines() 的基本用法

splitlines() 是根據換行符號來切割字串的函數。

它與 split("\n") 類似,但最大的特點是能夠同時處理多種換行格式,如 \r\n

使用範例

text = "Hello\nWorld\nPython"
print(text.splitlines())  # 輸出: ['Hello', 'World', 'Python']

與 split(“\n”) 的差異

text = "Hello\nWorld\nPython\n"
print(text.split("\n"))     # 輸出: ['Hello', 'World', 'Python', '']
print(text.splitlines())    # 輸出: ['Hello', 'World', 'Python']

split("\n") 會保留最後一個換行導致產生空字串,
splitlines() 則會自動忽略結尾的換行,適合用於文本處理

5-2. partition()(依第一個分隔符切成三段)

partition() 會在第一次出現的分隔符處,把字串分成三部分,並以 Tuple(元組)的形式回傳。

使用範例

text = "Hello,World,Python"
print(text.partition(","))  # 輸出: ('Hello', ',', 'World,Python')

可看到輸出是三個部分的元組:(前段, 分隔符, 後段)

與 split() 的差異

方法分割結果
split(",")['Hello', 'World', 'Python']
partition(",")('Hello', ',', 'World,Python')

partition() 的特色是只處理第一次出現的分隔符

應用範例:擷取 URL 協定

url = "https://example.com/page"
protocol, separator, domain = url.partition("://")
print(protocol)   # 輸出: https
print(domain)     # 輸出: example.com/page
  • 雖然 split("://") 也可用,但 partition() 能明確取得三個部分,非常方便。

5-3. rsplit()(從右側開始分割)

一般的 split() 是從左側開始分割,而 rsplit() 則是從右側開始。這在處理路徑或檔名等資料時特別有用。

使用範例

text = "home/user/documents/file.txt"
print(text.rsplit("/", 1))  # 輸出: ['home/user/documents', 'file.txt']
  • split("/") 會切成所有部分
  • rsplit("/", 1) 則只從最後一個斜線分割

與 split() 的差異比較

text = "apple banana cherry date"
print(text.split(" ", 2))   # 左側開始分割 2 次 → ['apple', 'banana', 'cherry date']
print(text.rsplit(" ", 2))  # 右側開始分割 2 次 → ['apple banana', 'cherry', 'date']

5-4. split() 與相關方法的比較總覽

方法說明常見用途
split()依指定分隔符完全分割一般字串處理
splitlines()根據換行符分割處理多行文字或檔案
partition()只分割第一個分隔符擷取 URL、欄位對應等
rsplit()從右邊開始分割檔案路徑、網域處理

6. 常見問題(FAQ)

在使用 Python 的 split() 函數時,很多人會遇到一些疑問或容易出錯的地方。本節整理了實務中常見的問題與解決方法,幫助你更順利地使用 split()

6-1. 為什麼 split() 的結果中會出現空字串?

問題描述

執行以下程式時,結果中會出現空字串

text = "apple,,banana,grape"
print(text.split(","))  # 輸出: ['apple', '', 'banana', 'grape']

原因說明

  • 因為字串中有連續兩個逗號(,,),中間沒有內容,就會產生一個空字串 ''

解決方式

若想要排除空元素,可以使用列表推導式(List Comprehension)

text = "apple,,banana,grape"
words = [word for word in text.split(",") if word]
print(words)  # 輸出: ['apple', 'banana', 'grape']

6-2. split()rsplit() 有什麼不同?

差異比較

方法分割方向適用情境
split()從左邊 開始分割一般文字處理
rsplit()從右邊 開始分割路徑、檔名、網域分析

實際範例

text = "apple banana cherry date"
print(text.split(" ", 2))   # 左邊分割兩次 → ['apple', 'banana', 'cherry date']
print(text.rsplit(" ", 2))  # 右邊分割兩次 → ['apple banana', 'cherry', 'date']

6-3. 如何在使用 split() 時,同時移除多餘空格?

解決方式

text = "  apple   banana  grape  "
words = [word.strip() for word in text.split()]
print(words)  # 輸出: ['apple', 'banana', 'grape']

6-4. 想使用多種不同的分隔符切割,要怎麼做?

解決方式

import re

text = "apple;banana,grape orange"
words = re.split(r"[;, ]+", text)
print(words)  # 輸出: ['apple', 'banana', 'grape', 'orange']

6-5. 什麼時候該用 split(),什麼時候該用 re.split()

適合用 split() 的情況

text = "apple,banana,grape"
print(text.split(","))  # ['apple', 'banana', 'grape']

適合用 re.split() 的情況

import re
text = "apple;banana,grape orange"
print(re.split(r"[;, ]+", text))  # ['apple', 'banana', 'grape', 'orange']

6-6. 如何將 split() 的結果轉換成字典?

解決方式

text = "姓名:Alice,年齡:30,職業:工程師"
pairs = text.split(",")

data_dict = {pair.split(":")[0]: pair.split(":")[1] for pair in pairs}
print(data_dict)

輸出結果

{'姓名': 'Alice', '年齡': '30', '職業': '工程師'}

7. 總結

本篇文章詳細介紹了 Python 的 split() 函數,從基礎、進階應用、實務範例、相關方法、常見問題 等各方面進行說明。
接下來我們來回顧重點內容,幫助你最大限度地活用 split()

7-1. split() 函數的重點整理

項目說明
基本語法字串.split(分隔符, 最大分割次數)
預設行為以空白字元(空格、Tab、換行) 為分隔
指定分隔符可指定像 "文字".split(",") 等特定符號
maxsplit 的應用限制最大分割次數,如 split(",", 2)
從右側分割使用 rsplit() 可從右側分割
多重分隔符可用 re.split(r"[;, ]+", text) 處理
按行分割使用 splitlines() 來分割多行字串
僅分割第一次使用 partition(),取得三部分的元組

7-2. split() 的實務應用場景

  • CSV 資料處理 → 使用 split(",")
  • 解析使用者輸入 → 使用 split(" | ")
  • 日誌檔案分析 → 使用 split(" ")
  • 處理路徑與網址 → 使用 rsplit("/", 1)
  • 建立字典資料 → 使用 {key: value for key, value in (pair.split(":") for pair in text.split(","))}

7-3. 精通 split() 的最佳實踐

理解預設行為,正確處理空白字元

text = "  apple   banana  grape  "
print(text.split())  # ['apple', 'banana', 'grape']

排除空字串,可使用列表推導式

words = [word for word in text.split(",") if word]

處理多個分隔符時,請使用 re.split()

import re
text = "apple;banana,grape orange"
print(re.split(r"[;, ]+", text))  # ['apple', 'banana', 'grape', 'orange']

需要限制分割次數時,使用 maxsplit

text = "Alice Bob Charlie"
print(text.split(" ", 1))  # ['Alice', 'Bob Charlie']

處理檔案路徑或日誌資料時使用 rsplit()

text = "home/user/documents/file.txt"
print(text.rsplit("/", 1))  # ['home/user/documents', 'file.txt']

若只需取得第一個分隔結果,使用 partition()

text = "name:Alice,age:30,job:engineer"
key, sep, value = text.partition(":")
print(key, value)  # 輸出: name Alice

7-4. 延伸學習資源

想進一步學習 Python 的字串處理,可以參考以下資源:

7-5. 結語與下一步

Python 的 split() 函數是最常用的字串處理方法之一
只要掌握基本用法,並與其他方法靈活搭配,就能大幅提升資料處理效率

✅ 本文的學習重點

  • split() 的基本語法與行為
  • rsplit()partition()splitlines() 的差異
  • 使用 re.split() 處理多種分隔符的應用
  • 實際應用範例(CSV、日誌、使用者輸入等)

推薦接下來學習 join()(將列表轉為字串)與 replace()(字串取代),這些方法能讓你更全面掌握 Python 的字串處理技巧。
請持續探索並掌握 Python 的字串功能,讓你在開發上如虎添翼!

📌 至此,split() 完整教學就圓滿結束!
祝你在學習 Python 的路上越走越順利 🚀