split,rsplit與splitlines作用
0 前言
在編程的過程中,字符串是我們最常打交道的數據類型,對字符串進行切分也是我們經常進行的操作。python提供了很多處理字符串的函數,處理起來非常方便。這裏介紹python中與字符串切分相關的三個函數,分別是split,rsplit與splitlines。
首先需要明確的一點是三個函數的作用都是進行字符串切分。其中split函數是最基本的切分函數,rsplit與splitlines函數的功能,都能使用split函數實現,額外提供這兩個函數,僅僅是爲了操作方便而已。
1 split
語法:
str.split(separator,num)
其中str表示要切分的字符串,separator表示分隔符,num表示切分的次數,默認是-1。表示分割所有。
示例:
>>> str = 'C/C++/Python/Java'
>>> str_split = str.split('/')
>>> print(str_split)
['C', 'C++', 'Python', 'Java']
>>> str_split = str.split('/',1)
>>> print(str_split)
['C', 'C++/Python/Java']
另外需要說明的是,如果不指定分隔符,split將以空白符作爲分割符。
關於python的split函數還有一個小小的坑。關於這個坑的詳細內容請查看博客python字符串split的一個小坑。
2 rsplit
split函數默認是從左向右進行切割的,如果使用num參數指定只切割一次的話,那麼就會從字符串傳的左側找到第一個匹配的分隔符進行切分,剩下的部分不再進行切分。
rsplit的意思是right split,就是從右側進行切分。如果使用num參數指定只切割一次的話,那麼就會從字符串傳的右側找到第一個匹配的分隔符進行切分,剩下的部分不再進行切分。
>>> str = 'C/C++/Python/Java'
>>> str_split = str.rsplit('/',1)
>>> print(str_split)
['C/C++/Python', 'Java']
同樣,如果不指定分隔符,rsplit將以空白符作爲分割符。
3 splitlines
splitlines的功能其實就是根據換行符進行split,其實就是根據\r, \r\n, \n進行分割。這三個都表示換行符,之所以狀況,是由不同平臺對換行符的定義不同產生的。
下面對不同平臺對換行符的定義進行介紹。
我們使用notepad++打開,windows下編輯的文本文檔,選擇顯示所有字符,每行的末尾都會顯示- CR LF,而在linux平臺下編輯的文本文檔,每行的末尾顯示爲LF。這裏的CR和LF是什麼意思呢?
- CR:Carriage Return,對應ASCII中轉義字符\r,表示回車
- LF:Linefeed,對應ASCII中轉義字符\n,表示換行
- CRLF:Carriage Return & Linefeed,\r\n,表示回車並換行
所以: - Windows操作系統採用兩個字符來進行換行,即CRLF;
- Unix/Linux/Mac OS X操作系統採用單個字符LF來進行換行;
- MacIntosh操作系統(即早期的Mac操作系統)採用單個字符CR來進行換行。
據說之所以產生現在的局面是由歷史原因的。
據野史記載,在很久以前的機械打字機時代,CR和LF分別具有不同的作用:LF會將打印紙張上移一行位置,但是保持當前打字的水平位置不變;CR則會將“Carriage”(打字機上的滾動托架)滾回到打印紙張的最左側,但是保持當前打字的垂直位置不變,即還是在同一行。
當CR和LF組合使用時,則會將打印紙張上移一行,且下一個打字位置將回到該行的最左側,也就是我們今天所理解的換行操作。
隨着時間的推移,機械打字機漸漸地退出了歷史舞臺,當初的紙張變成了今天的顯示器,打字機的按鍵也演變爲了如今的鍵盤。在操作系統出現的年代,受限於內存和軟盤空間的不足,一些操作系統的設計者決定採用單個字符來表示換行符,如Unix的LF、MacIntosh的CR。他們的意圖都是爲了進行換行操作,只是當初並沒有一個國際標準(或者其他原因,鬼知道),所以纔有這樣字符上的不同。
>>> str = 'C\rC++\nPython\r\nJava'
>>> str_split = str.splitlines()
>>> print(str_split)
['C', 'C++', 'Python', 'Java']
參考文章: