Python 內建了六個會改變大小寫的字串方法:.lower()、.upper()、.title()、.capitalize()、.swapcase(),以及 .casefold()。每一個都會接收原始字串,對每個字元套用一條確定性的規則,然後回傳一個新的字串——Python 中的字串是不可變的,因此原始字串永遠不會被修改。這些方法涵蓋了日常工作:在比較之前把使用者輸入轉成小寫、把常數顯示成大寫、把句子的第一個字母大寫,以及為了風格效果而交換大小寫。但一旦你需要從 snake_case 轉成 camelCase,或是從 PascalCase 轉成 kebab-case 時,內建方法就幫不上忙了,因為識別字中的大小寫屬於語法層次——任何一個字母錯誤都會讓程式碼失效。這正是像 Case Converter 這種瀏覽器工具派上用場的時候,它會跨空格、底線、連字號,以及 camelCase 邊界重新對你的輸入進行斷詞,然後以十種樣式並排重新輸出。本指南接下來會逐一說明每個 Python 方法、明確展示它們的回傳結果,並解釋什麼時候你應該改用工具。

how to convert case in python
How to Convert Case in Python: Methods Compared

Python 的六個內建字串大小寫方法

凡是使用標準 Python 能做到的大小寫轉換,都來自 str 型別上的六個方法之一。它們在任何字串上都可以直接使用,無需匯入任何模組,這也是它們幾乎出現在每個程式碼庫與教學中的原因。

  • .lower() — 回傳字串的副本,其中每個有大小寫的字元都會對應為小寫。最常用於在比較或儲存之前標準化使用者輸入。
  • .upper() — 回傳字串的副本,其中每個有大小寫的字元都會對應為大寫。常見於日誌訊息、橫幅文字,以及類似常數的顯示字串。
  • .title() — 回傳字串的副本,其中每個單字的第一個字母大寫,其餘字母小寫。所謂的單字以非字母字元作為邊界來界定。
  • .capitalize() — 回傳字串的副本,其中只有第一個字元大寫,其餘所有字元都是小寫,不管單字邊界在哪裡。
  • .swapcase() — 回傳字串的副本,其中大寫字母會轉成小寫,小寫字母會轉成大寫。
  • .casefold() — 回傳經過積極標準化以便進行不區分大小寫比對的副本。它在 ASCII 中沒有對應小寫形式的字元上,處理得比 .lower() 更徹底。

由於字串是不可變的,上述每個方法都會回傳一個新的字串。呼叫 "Hello".lower() 並不會把原本的字面值變成 "hello";它會產生一個全新的值,你必須指派、回傳或傳遞到某處才能使用。

每個 Python 方法實際回傳什麼

下表以 "Hello World" 作為基準,讓各方法之間的差異一目了然。把這些輸出結果貼到 Python REPL 中,得到的值會完全一致。

方法呼叫結果
.lower()"Hello World".lower()"hello world"
.upper()"Hello World".upper()"HELLO WORLD"
.title()"hello world".title()"Hello World"
.capitalize()"hello world".capitalize()"Hello world"
.swapcase()"Hello World".swapcase()"hELLO wORLD"
.casefold()"Straße".casefold()"strasse"

最後一列很重要:.lower() 會把 "Straße" 保留為 "straße",而 .casefold() 則會把 sharp-s 折疊成兩個 s。這就是經驗法則——.lower() 用於顯示,.casefold() 用於跨語言的不區分大小寫比對。

為什麼內建方法無法處理命名慣例

上述六個方法是為書面語言設計的。它們認得字母,也認得空格。它們並不知道 user_email_address 中的底線是單字分隔符,也不知道 getHttpResponse 中的大寫 H 是 camelCase 的邊界。如果只用內建方法請 Python 把 "user_email_address" 轉成 camelCase,最後你會寫出一個小幫手函式:在底線處切開、把第一個之後的各部分首字大寫、然後串接起來。

那段小程式只能處理單一種分隔符,而且會忽略連字號、標點符號、緊貼單字的數字,以及像 HTMLParser 這種充滿縮寫詞的 PascalCase 輸入。每個真實的程式碼庫都會以稍微不同的方式重新發明這個小函式,而每個版本又會在稍微不同的邊緣情況下出錯。命名樣式轉換更像是一個剖析 (parsing) 問題,而非大小寫問題,而 Python 的內建方法根本不做剖析。

同樣的限制也會阻擋反方向的轉換。如果你從 "hello-world-example" 出發,無論怎麼組合 .upper()、.lower() 和 .title(),都無法一次就得到 helloWorldExample。你只能手動切開、首字大寫、再重新串接,或是直接交給已經能可靠完成這件事的工具。

不寫程式碼也能在 Python 中轉換大小寫

對於一次性的轉換——重新命名變數、草擬 slug、標準化一整欄的 API 欄位名稱——最快的路徑就是用瀏覽器工具。Case Converter 會跨空格、底線、連字號、標點符號,以及 camelCase 邊界重新對你的文字進行斷詞,然後在同一個面板中顯示所有常見的書寫與命名樣式。以下是它的使用方式。

  1. 在瀏覽器中開啟 Case Converter。
  2. 把你的 Python 識別字、句子或標題輸入或貼到輸入框中。
  3. 查看下方的面板:十種輸出樣式都會在你輸入或貼上時即時更新,因此沒有提交按鈕需要點。
  4. 並排比較各種變體。snake_case、camelCase、PascalCase、kebab-case,以及 CONSTANT_CASE 都會同時出現,另外還有 UPPERCASE、lowercase、Title Case、Sentence case,以及一種交替樣式。
  5. 在你想要的那個變體旁邊點擊 Copy,然後直接貼到你的編輯器、終端機或設定檔中。

整個過程都在 JavaScript 中於本機執行,因此資料不會離開這個頁面。當你正在轉換的識別字包含內部名稱、密鑰片段,或是你不想上傳的資料庫欄位時,這點尤其重要。

Python 開發者實際使用的命名慣例

PEP 8(Python 風格指南)明確規定了哪裡該用哪種大小寫。下表是精簡過的對照表;完整的規則可以在 Python Enhancement Proposal 原文找到。

識別字類型慣例範例
模組名稱簡短,全部小寫requests
套件名稱簡短,全部小寫pandas
函式名稱snake_casecalculate_total()
變數名稱snake_caseuser_count
常數UPPER_SNAKE_CASEMAX_RETRIES
類別名稱CapWords (PascalCase)HttpRequest
例外名稱CapWords,以 Error 結尾ValueError
方法名稱snake_caseto_camel()
實例方法的第一個參數selfdef parse(self, text):
類別方法的第一個參數clsdef from_dict(cls, data):

當你需要把程式碼從一種慣例改寫成另一種——例如把使用 camelCase 的 JavaScript SDK 翻譯成需要 snake_case 的 Python 套件——瓶頸在於能否可靠地處理每一個識別字。重新斷詞的工具是批次轉換最安全的方式,因為一旦你確認某個名稱的剖析結果正確,同樣的輸入就永遠會產生同樣的輸出。

在 Python 方法與瀏覽器工具之間做出選擇

當轉換屬於程式邏輯的一部分時——標準化輸入、格式化輸出、以不區分大小寫的方式比較值——請使用 Python 的內建方法。它們成本低、無相依性,而且在程式碼審查中容易閱讀。

當轉換只是一次性的瑣事時——重新命名單一識別字、格式化一個標題、把一整欄 API 欄位從 camelCase 的 JSON 遷移到 snake_case 的資料庫欄位——請改用瀏覽器工具。這類工作真正的風險不在程式碼,而在打錯字。同時看到十種輸出樣式,並精準複製你想要的那一個,就能消除這個風險。

如果你在貼到表單或 SQL WHERE 子句之前還需要先測量結果的長度,Character Counter 能在你輸入的同時即時顯示字元長度,而且完全不需要上傳任何資料。這兩個工具加在一起,就能涵蓋在實際 Python 腳本之外,大部分大小寫轉換工作會被要求做的事。

延伸閱讀:Capitalize Each Word: From Title Case to camelCase。

延伸閱讀:Get a Random Word From a List: Python and Browser Options。