# Python String(字串)操作 > [color=#40f1ef][name=LHB阿好伯, 2020/03/13][:earth_africa:](https://www.facebook.com/LHB0222/) ###### tags: `Python` [TOC] # 字串建立 不管是R或Python中單引號或雙引號下的任何資料都是字串 ## 資料型態-type() & class() 複習一下 而在Python確認資料格式的函數是使用 ==`type()`== 而在R中則使用 ==`class()`== ```r= # R_Code T1 = 'AHB' print(class(T1)) T2 = "Hello, World!" print(class(T2)) ``` :::success [1] "character" [1] "character" ::: ```python= # Python_Code T1 = 'AHB' print(type(T1)) T2 = 'Hello, World!' print(type(T2)) ``` :::success <class 'str'> <class 'str'> ::: ### 多行字串 Python比較特別可以用三重單引號(''')或雙引號(""")進行多行字串 ```python= # Python_Code multiline_string = '''I am a teacher and enjoy teaching. I didn't find anything as rewarding as empowering people. That is why I created 30 days of python.''' print(multiline_string) ``` :::success I am a teacher and enjoy teaching. I didn't find anything as rewarding as empowering people. That is why I created 30 days of python. ::: 在Rstudio中則是接受Enter換行 在輸出時則會顯示 **\n** 跳脫字元 ```r= T3 = "I am a teacher and enjoy teaching. I didn't find anything as rewarding as empowering people. That is why I created 30 days of python." print(T3) ``` :::success [1] "I am a teacher and enjoy teaching. \nI didn't find anything as rewarding as empowering people. \nThat is why I created 30 days of python." ::: ## 字串資料 ### 字串合併 在python 中字串的連接可以直接使用加號合併 ==+== 而在R語言中則可以使用 ==paste()== or ==paste0()== 這兩個差別在於字串合併間是否有空格 ```python= "1" + "2" + "3" ``` :::success '123' ::: ```R= #R_Code paste("1", "2", "3") paste0("1", "2", "3") ``` :::success "1 2 3" "123" ::: ### 跳脫字元(Escape Character)與ASCII 在字串中有一些特殊字元例如單引號、雙引號等特殊字元 需在前面加上一個反斜線 `\` 才可以正常使用 | 跳脫字元 | ASCII值 | 意義 | | :--------: | :--------: | :--------: | | \\' | 27 | 單引號 | | \\" | 22 | 雙引號 | | \\\ | 5C | 反斜線 | | \\a | 07 | control character BEL (a for alert) | | \\b | 08 | BackSpace 鍵 | | \\f | 0C | 換頁 | | \\n | 0A | 換行 | | \\o | | 8 進位 | | \\r | 0D | 游標移至最左側 | | \\x | | 16 進位 | | \\t | 09 | Tab鍵 (8 spaces) | | \\v | 0B | 垂直定位 | ```python= #Python_Code print('a\nb') #換行 print("a\tb") #Tab (8 spaces) print("a\\b") #\\ Back slash print("a\'b") #\' Single quote (') print("a\"b") # \" Double quote (") ``` :::success #換行 a b #Tab (8 spaces) a b #\\ Back slash a\b #Single quote (') a'b #Double quote (") a"b ::: ## String formating字串格式化 在python中,有許多格式化字符串的方法 把字串中的變數替換成變數值 以下為最常見的方式 1. 舊式字串格式化 1. 新式字串格式化 1. 字串插值 ### 舊式字串格式化 Python 3.6 版本之後推薦使用的新式字串格式化 舊式版本使用 `%` 運算子來進行字串格式化 |   sign | funtion | |:---:|:---:| |       %c |  格式化字符及其ASCII碼 | |       ==%s== |  ==格式化字符串== | |       %d |  格式化整數 | |       %u |  格式化無符號整型 | |       %o |  格式化無符號八進制數 | |       %x |  格式化無符號十六進制數 | |       %X |  格式化無符號十六進制數(大寫) | |       ==%f== |  ==格式化浮點數字,可指定小數點後的精度== | |       %e |  用科學計數法格式化浮點數 | |       %E |  作用同%e,用科學計數法格式化浮點數 | |       %g |  %f和%e的簡寫 | |       %G |  %f 和%E 的簡寫 | |       %p |  用十六進制數格式化變量的地址 | ```python= # Strings and numbers radius = 10 pi = 3.14 area = pi * radius ** 2 formated_string = 'The area of circle with a radius %d is %.2f.' %(radius, area) # 2 refers the 2 significant digits after the point print(formated_string) ``` :::success The area of circle with a radius 10 is 314.00. ::: 若是仔細觀看範例 可以發現在格式化的使用可以說是非常麻煩 需要先定義格式化類型及位置 之後再定義格式化的內容 所以後面就衍生出新的格式化方式format() ### 新式字串格式化format() 其功能和舊式格式化相差無幾 但主要是捨去 `%` 讓字串格式化使用上可讀性提升許多 ```python= radius = 10 pi = 3.14 area = pi * radius ** 2 formated_string = 'The area of a cricle with a radius {} is {:.2f}.'.format(radius, area) # 2 digits after decimal print(formated_string) ``` ### Formatted String Literal字串插值 Python 3.6 新增了格式字串字面值Formatted String Literal此一作法可以把 Python 運算式嵌入在字串常數中 字符串以 ==f== 開頭,我們可以將數據插入它們的相應位置 ```python= a = 4 b = 3 print(f'{a} + {b} = {a +b}') print(f'{a} - {b} = {a - b}') print(f'{a} * {b} = {a * b}') print(f'{a} / {b} = {a / b:.2f}') print(f'{a} % {b} = {a % b}') print(f'{a} // {b} = {a // b}') print(f'{a} ** {b} = {a ** b}') ``` :::success 4 + 3 = 7 4 - 3 = 1 4 * 3 = 12 4 / 3 = 1.33 4 % 3 = 1 4 // 3 = 1 4 ** 3 = 64 ::: ## Python字符串作為字符序列 Python字符串是字符序列,並與其他Python排序的對象序列(列表和元組)共享其基本訪問方法 ```python= language = 'Python' a,b,c,d,e,f = language # unpacking sequence characters into variables print(a) # P print(b) # y print(c) # t print(d) # h print(e) # o print(f) # n ``` ### 通過索引訪問字符串中的字符 在Python中索引計數從 ==零== 開始 因此,字符串的第一個字母為0索引 而字符串的最後一個字母為字符串的長度-1。 ![](https://i.imgur.com/13nc6Ty.png) ```python= language = 'Python' print(language[0]) #P print(language[1]) #y print(language[2]) #t ``` 如果我們想從右端開始,我們可以使用負索引 ==-1== 是最後一個索引 ```python=+ print(language[-1]) #n print(language[-2]) #o print(language[-3]) #h ``` ### 反轉字符串 ```python= greeting = 'Hello, World!' print(greeting[::-1]) # !dlroW ,olleH ``` ### 跳過片段 ```python= language = 'Python' pto = language[0,6:2] # print(pto) # Pto ``` ## 常用字串函數 | 函數 | 說明 | 範例 | | ----- | ----- |----| | capitalize() | 將字符串的第一個字符轉換為大寫字母 | |count()|返回出現在字符串中的子字符串count(substring, start=.., end=..)|| |endswith()|檢查字符串是否以指定的結尾結尾|substring.endswith('text')| |expandtabs()|用空格替換製表符,默認製表符大小為8。它採用製表符大小參數|| |find()|返回第一次出現的子字符串的最低索引,如果找不到則返回-1|substring.find('text')| |rfind()|返回第一次出現的子字符串的最高索引,如果找不到則返回-1|substring.rfind('text')| |index()|返回子字符串的最低索引,其他參數指示開始和結束索引|substring.index('text', start=…, end=…)| |rindex()|返回子字符串的最高索引,其他參數指示開始和結束索引(默認為0,字符串長度為1) |substring.rindex('text', start=…, end=…)| |isalnum()|檢查字母數字字串|substring.isalnum()| |isalpha()|檢查所有字串串元素是否都是字母字符(az和AZ)|substring.isalpha()| |isdecimal()|檢查字符串中的所有字串是否均為十進制(0-9)|substring.isdecimal()| |isdigit()|檢查字符串中的所有字串是否都是數字(0-9和其他一些unicode字符用於數字)|substring.isdigit()| |isnumeric()|檢查字符串中的所有字串是否都是數字或與數字相關(就像isdigit()一樣,只接受更多符號,例如½)|| |isidentifier()|檢查有效的標識符-表示它檢查字串是否為有效的變量名|| |islower()|檢查字串中的所有字母字符是否都小寫|| |isupper()|檢查字串中的所有字母字符是否都大寫|| |join()|串聯字符串|| |strip()|刪除字串中所有給定的字串|| |replace()|用給定的字串替換子字符串|| |split()|使用給定的字串作為分隔符來拆分字串|| |title()|返回標題大寫的字符串|| |swapcase()|將所有大寫字符轉換為小寫,並將所有小寫字符轉換為大寫|| |startswith()|檢查字符串是否以指定的字符串開頭|substring.startswith('text')| 全文分享至 https://www.facebook.com/LHB0222/ 有疑問想討論的都歡迎於下方留言 喜歡的幫我分享給所有的朋友 \o/ 有所錯誤歡迎指教 ![](https://i.imgur.com/47HlvGH.png)