python中split,rsplit與splitlines作用

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']

參考文章:

  1. CRLF、CR、LF詳解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章