生活中總有幾樣註定的事:死亡、稅單以及須要處理字符串的程序員。 字符串能夠有多種形式。 它們能夠是非結構化的文本,用戶名,產品描述,數據庫列表名,或者其它任何咱們使用語言描述的內容。程序員
既然字符串數據幾乎無處不在,那麼掌握所使用的工具如何進行字符串處理是很是重要的。 幸運的是,與其它語言甚至舊版本的Python語言相比,Python語言對字符串的操做很是簡單。數據庫
您將從本文中學習一些最基本的字符串操做:拆分,鏈接和拼接。 您不只將學習如何使用這些工具,並且還將深刻了解它們是如何工做。數組
Python語言中,字符串是以str對象的形式表示的,是不可變的:這意味着不能直接更改內存中的對象。 記住這兩個特色將會幫助您學習(而且記住)如何使用.split( )。app
您猜到字符串的這兩個特徵是如何與Python語言中的拆分功能相關的嗎?若是您猜的到 由於字符串是一種特殊類型,因此.split( )是一個實例方法,那麼您就是正確的!在其它一些語言(如Perl)中,是將原始字符串用做獨立的.split( )函數的輸入,而不是使用方法調用字符串自己。函數
注意:如何調用字符串方法工具
這裏顯示的 .split()這種寫法就是對字符串實例進行調用的方法。 可稱之爲爲靜態方法,但這並不理想的形式,由於它比較「冗長」。爲了完整起見,舉個例子:學習
與下面首選的方法一比較,就會以爲上面的寫法顯得有些笨拙了:測試
有關Python語言中的實例、類和靜態方法的更多內容,請查看咱們的this
字符串不可變會怎樣? 這實際上是提醒您字符串方法不支持就地操做,但它們會在內存中返回一個新對象。3d
注意:就地操做
就地操做是直接更改被調用的對象的操做。 常見的例子是對列表使用的.append( )方法:當您對列表使用.append( )函數時,原列表會被更改,原列表中填加了.append( )的輸入。
無參數字符串拆分
在深刻學習字符串拆分以前,先看一個簡單的例子:
Python 代碼:
輸出結果:
這其實是.split( )調用的一個特例,就是由於簡單,因此我選了它作例子。若是不指定任何分隔符,.split( )會使用空格作爲分隔符。
這種不帶參數直接調用.split( )的另外一個特性是它會自動刪除字符串前導、尾隨以及連續的空格。 比較一下對下面的字符串調用split( )時,不使用分割符和使用" "(空格)做爲分割符時的結果:
Python 代碼:
結果:
Python 代碼:
結果:
首先要注意的是,這個例子反映了Python語言中字符串的不可改變性:後面調用.split( )時是對原始字符串進行操做,而不是對第一次調用.split( )後生成的列表進行操做。
第二個你應該注意到的是,無參數調用.split( )會提取句子中的單詞並丟棄任何空格。
.split(" ")的結果很直觀。 當有前導或尾隨分隔符時,您將獲得一個空字符串,這能夠在結果列表的第一個和最後一個元素中看到。
當有多個連續的分隔符(例如「this」和「is」之間以及「is」和「my」之間的多個空格),第一個將用做分隔符,後續的分隔符將進入結果列表 做爲空字符串。
注意:調用.split()時的分隔符
雖然上面的示例使用單個空格字符做爲.split( )的分隔符,但並無限制您使用的分隔符的類型或字符串長度。 惟一的要求是您的分隔符是一個字符串。 你可使用從「...」到「separator」等任何東西。
使用Maxsplit對拆分進行限定
.split( )有一個名爲maxsplit的可選參數。 默認狀況下,.split( )將在調用時進行全部可能的拆分。 可是,若是對maxsplit賦值後,只會生成指定數量的拆分。 用咱們以前的示例字符串,能夠看到maxsplit的運行狀況:
Python 代碼:
運行結果:
如上所示,若是將maxsplit設置爲1,則第一個空白區域將做爲分隔符,其他的部分將被忽略。 讓咱們作一些練習來測試一下到目前爲止所學的一切。
若是對maxsplit賦一個負數,結果會是怎樣?
答案: 「 本身試試看: Maxsplit」
.split( ) 將對全部的分隔符上進行字符串拆分,這和不設置Maxsplit參數時的缺省設置是同樣的。
您最近拿到了一個逗號分隔(CSV)的文件,可是其格式編排的大有問題。 您的任務是將每行提取到一個列表中,該列表的每一個元素表明該文件的列。 這個文件的格式有什麼問題呢? 其中的「Address」字段中包含了多個逗號,但實際上須要在列表中表示爲單個元素!
假定讀入到內存中的文件是下面這樣的多段字符串:
CSV文件:
但願的輸出結果應該是這樣的由列表組成的列表
Python輸出:
內層的列表是咱們關心的CSV文件的列元素,每個內層的列表是CSV文件的一行,外層的列表把全部的行組合起來。
答案: 「章節理解檢查」
這裏給出個人答案。能夠由幾種方法獲得結果。重要的是如何使用.split(),以及使用附加參數獲得但願的結果:
Python代碼:
咱們調用了兩次.split( )。第一個調用可能理解起來有點難,但不要擔憂!咱們一步一步看進去,您就會對這些表達式熟悉了。來看看第一個.split( )調用吧:unsplit.split(" n")[1:]。
第一個元素是unsplit,是指向輸入字符串的變量。以後就是.split( )調用:. split(" n")。這裏,咱們使用了一個特殊字符 - 換行符 作爲分隔符。
是作什麼的呢?顧名思義,它指明在讀取字符串的內容時,它以後的每一個字符都應顯示在下一行。像咱們使用的input_string這樣的多行字符串中,每行的末尾都有一個隱藏的 n。
這一行最後的部分用法可能有點新:[1:]。這條語句執行到這個部分以前會輸出一個新的列表, [1:]看起來像列表索引表示,其實它就是一種列表索引的表示方法!這一行最後額外的索引表示法會爲咱們輸出一個列表切片。在本例中,咱們取出索引1以及其後面的全部內容,丟棄索引0處的元素。
總之,咱們遍歷一個字符串列表,其中每一個元素表明多行輸入字符串中除了第一行以外的每一行。
對每一行字符串,咱們再次使用.split( )進行字符拆分,但此次咱們使用maxsplit僅拆分前兩個逗號,保留地址部分的內容原封不動。 以後,咱們把結果添加到已定義的列表數組中,並返回給調用者。
另外一個字符串的基本操做是與拆分字符串相反的操做:字符串鏈接。 若是您尚未關注到這個功能,請不要擔憂。 這只是把字符串「粘在一塊兒」的一種奇特方式。
使用 + 操做符進行鏈接
有幾種方法能夠作到這一點,具體取決於您要實現的目標。 最簡單和最經常使用的方法是使用加號(+)將多個字符串添加到一塊兒。 只需在您想要鏈接的字符串之間放置一個+:
Pyton代碼:
結果:
和數學運算同樣,您還能夠將字符串相乘來進行字符串重複:
Pyton代碼:
結果:
請記住,字符串自己是不可改變的! 若是想把字符串鏈接或重複的結果存在變量中,則必須將結果賦給新的字符串變量進行保存。
Pyton代碼:
結果:
Pyton代碼:
結果:
Pyton代碼:
結果:
若是不是不可改變的字符串,則full_sentence會輸出"Hello,world,world"。
另外一個須要注意的是Python語言不會進行隱式字符串轉換。 若是您嘗試將字符串與非字符串類型鏈接,Python將引起TypeError:
Pyton代碼:
結果:
出錯的緣由是在Python語言中,您只能將字符串與其餘字符串鏈接起來,這是中您須要注意到的Python語言的特色。若是您使用過諸如JavaScript之類的語言就會知道,這些語言中會嘗試進行隱式類型轉換。