- 1 1. 前言
- 2 2. split() 函數的基礎用法(給初學者)
- 3 3. split() 的進階用法(中階程度)
- 4 4. 實際應用範例(實戰篇)
- 5 5. split() 函數與其他相關方法
- 6 6. 常見問題(FAQ)
- 7 7. 總結
- 8 7-4. 延伸學習資源
- 9 7-5. 結語與下一步
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('"')
移除多餘符號 - 可應用於日誌分析、自動化報表等場景
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 的路上越走越順利 🚀