# e.Python - 字串(String)
###### tags: `Python`
## 1.字串(String)
* <font color="#0080FF">**字串為字元序列**</font>
```python=+
x = "Hello"
print(x[0])
print(x[-1])
print(x[1:])
print(len(x))
```
> ```H```</br>
> ```o```</br>
> ```ello```</br>
> ```5```
##
* <font color="#0080FF">**字串物件修改**</font>
```python=+
x = "GoodBye~"
print(x,id(x))
x = x[:-1] #字串不能修改,會直接成為新物件
print(x,id(x))
```
> ```GoodBye~ 1928774669296```</br>
> ```GoodBye 1928774658672```
## 2.基本的字串操作(String)
* <font color="#0080FF">**連接多個字串**</font>
```python=+
x = "Hello " + "World"
print(x)
x = "Hello " "World" #自動將多個空白相隔的字串連接在一起
print(x)
```
> ```Hello World```</br>
> ```Hello World```
## 3.特殊字元和轉義字元
* <font color="#0080FF">**基本轉義字元**</font>
| 類別 | 說明 |
| :------: | :-----------: |
| \\' | 單引號(')|
| \\" | 雙引號(") |
| \\\\ | 反斜線(\\) |
| \\a | 發出嗶聲(Bell) |
| \\b | 倒退鍵(Backspace) |
| \\f | 換頁 |
| \\n | 換行 |
| \\r | 歸位符號(Carriage Return) |
| \\t | 定位符號(Tab) |
| \\v | 垂直定位符號(Vertical Tab) |
##
* <font color="#0080FF">**數值(八進位和十六進位)表示**</font>
```python=+
'm'
'\155' #八進位轉義字元
'\x6D' #十六進位轉義字元(大小寫皆可)
```
> ```'m'```</br>
> ```'m'```</br>
> ```'m'```
##
* <font color="#0080FF">**轉義字元表示**</font>
```python=+
'\n' #換行符號
'\012' #八進位轉義字元
'\x0A' #十六進位轉義字元(大小寫皆可)
```
> ```'\n'```</br>
> ```'\n'```</br>
> ```'\n'```
##
* <font color="#0080FF">**Unicode字串表示**</font>
> <font color="#EA0000">**Python 3中所有的字串都是Unicode字串**</font>
```python=+
#透過Unicode名稱,表示Unicode字元
unicode_a = '\N{LATIN SMALL LETTER A}'
unicode_a
unicode_a_with_acute = '\N{LATIN SMALL LETTER A WITH ACUTE}'
unicode_a_with_acute
"\u00E1" #透過\u後面跟著4碼16進位數字表示Unicode字元
```
> ```'a'```</br>
> ```'á'```</br>
> ```'á'```
## 4.字串常用的 Method 與函式
* <font color="#0080FF">**join()**</font>
```python=+
x = " ".join(['HI,','my','name','is','ZEOxO','!!'])
print(x)
```
> ```HI, my name is ZEOxO !!```
##
* <font color="#0080FF">**split()**</font>
```python=+
x = 'HI, \t\tmy \nname \tis \n\rZEOxO !!'
print(x.split()) #預設為切割空白字元(空格、換行、定位等)
x = 'Mississippi'
print(x.split('ss'))
x = 'a b c d'
print(x.split(' ',2))
print(x.split(' ',9))
x = 'a\nb c d'
print(x.split(' ',2)) #指定只切「空白」字元(不會切轉義字元)
print(x.split(None,2)) #不指定,則會切轉義字元
```
> ```['HI,', 'my', 'name', 'is', 'ZEOxO', '!!']```</br>
> ```['Mi', 'i', 'ippi']```</br>
> ```['a', 'b','c d']```</br>
> ```['a', 'b', 'c', 'd']```</br>
> ```['a\nb', 'c', 'd']```</br>
> ```['a', 'b', 'c d']```
##
* <font color="#0080FF">**float() 將字串轉為浮點數**</font>
```python=+
float('123.456')
float('123')
float('xxyy')
```
> ```123.456```</br>
> ```123.0```</br>
> ```ValueError: could not convert string to float: 'xxyy'```
##
* <font color="#0080FF">**int() 將字串轉為數字**</font>
```python=+
int('3333')
int('123.456') #不可有小數點
int('10000',8) #用8進位的基底來解釋10進位整數(10000)
int('101',2) #用2進位的基底來解釋10進位整數(101)
int('ff',16) #用16進位的基底來解釋10進位整數(ff)
int('123456',6) #6進位為「0~5」,不應包含「6」
```
> ```3333```</br>
> ```ValueError: invalid literal for int() with base 10: '123.456'```</br>
> ```4096```</br>
> ```5```</br>
> ```255```</br>
> ```ValueError: invalid literal for int() with base 6: '123456'```
##
* <font color="#0080FF">**strip()、lstrip()、rstrip()**</font>
```python=+
x = ' Hello World\t\t'
x.strip()
x.lstrip()
x.rstrip()
```
> ```'Hello World'```</br>
> ```'Hello World\t\t'```</br>
> ```' Hello World'```
##
* <font color="#0080FF">**strip() 指定字元**</font>
```python=+
x = 'www.python.org'
x.strip('w')
x.strip('.gorw')
x.strip("go")
x.strip("gr")
```
> ```.python.org```</br>
> ```python```</br>
> ```www.python.or```</br>
> ```www.python.o```
##
* <font color="#0080FF">**isdigit()、isalpha()、islower()、isupper()**</font>
```python=+
x = '123'
x.isdigit()
x.isalpha()
x = 'MM'
x.islower()
x.isupper()
```
> ```True```</br>
> ```False```</br>
> ```False```</br>
> ```True```
## 5.字串的搜尋
* <font color="#0080FF">**in 算符**</font>
```python=+
x = 'The string'
print('str' in x)
print('sTr' in x)
print('e s' in x)
```
> ```True```</br>
> ```False```</br>
> ```True```
##
* <font color="#0080FF">**find()、rfind()、index()、rindex()**</font>
```python=+
x = 'Mississippi'
print(x.find('is'))
print(x.find('zz')) #不存在傳回-1
print(x.find('s',2)) #從指定索引值開始搜尋
print(x.find('s',4,5)) #到指定索引值之前停止搜尋
print(x.find('ss',3))
print(x.find('ss',0,3))
print(x.rfind('ss'))
#index和rindex與find、rfind相同,但找不到文字時會引發例外錯誤
```
> ```1```</br>
> ```-1```</br>
> ```2```</br>
> ```-1```</br>
> ```5```</br>
> ```-1```</br>
> ```5```
##
* <font color="#0080FF">**count()**</font>
```python=+
x = "Mississippi"
x.count('ss')
```
> ```2```
##
* <font color="#0080FF">**startswith()、endswith()**</font>
```python=+
x = "Mississippi"
print(x.startswith('Miss'))
print(x.endswith('pp'))
print(x.endswith(('i','u'))) #可以tuple形式傳入多筆搜尋文字
```
> ```True```</br>
> ```False```</br>
> ```True```
## 6.字串的修改
* <font color="#0080FF">**replace()**</font>
```python=+
x = "Mississippi"
x.replace('ss','zzz')
```
> ```'Mizzzizzzippi'```
##
* <font color="#0080FF">**maketrans()、translate()**</font>
```python=+
x = '~x ^ (y % z)'
table = x.maketrans('~^()','!&[]')
print(table)
x.translate(table)
```
> ```{126: 33, 94: 38, 40: 91, 41: 93}```</br>
> ```'!x & [y % z]'```
##
* <font color="#0080FF">**capitalize()、title()**</font>
```python=+
x = 'hi, my name is ZEOxO !!'
print(x.capitalize()) #將字串的第一個字元為大寫、其餘小寫
print(x.title()) #將所有單字的第一個字元為大寫、其餘小寫
```
> ```Hi, my name is zeoxo !!```</br>
> ```Hi, My Name Is Zeoxo !!```
##
* <font color="#0080FF">**<!>swapcase()、expandtabs()**</font>
```python=+
x = 'hi,\tmy\tname\tis\tZEOxO !!'
print(x.swapcase()) #將字串內所有字母大寫轉小寫、小寫轉大寫
print(x.expandtabs(1)) #將字串內定位符號轉為指定數目的空格(如1個空格)
```
> ```HI, MY NAME is zeoXo !!```</br>
> ```hi, my name is ZEOxO !!```
##
* <font color="#0080FF">**ljust()、rjust()**</font>
```python=+
x = 'Hello World'
print(x.ljust(20,'!'))
print(x.rjust(20,'!'))
print(x.center(20,'!'))
```
> ```Hello World!!!!!!!!!```</br>
> ```!!!!!!!!!Hello World```</br>
> ```!!!!Hello World!!!!!```
## 7.字串的格式化輸出
* <font color="#0080FF">**指名參數格式化輸出(format)**</font>
```python=+
st = '{0:10} are often called the "king of the beasts".'.format("Lion")
st = '{0:>10} are often called the "king of the beasts".'.format("Lion")
st = '{0:#>10} are often called the "king of the beasts".'.format("Lion")
```
> ```Lion are often called the "king of the beasts".```</br>
> ``` Lion are often called the "king of the beasts".```</br>
> ```######Lion are often called the "king of the beasts".```
##
* <font color="#0080FF">**指名參數格式化輸出(字典)**</font>
```python=+
"NO.{rank} is {name}!!".format(name = 'ZEOxO',rank = '1')
```
> ```'NO.1 is ZEOxO!!'```
##
* <font color="#0080FF">**<!>指名參數格式化輸出(陣列)**</font>
```python=+
"User name:{info[0]} ID:{info[1]} addr:{info[2]}".format(info = ['ZEOxO','123456','Taipei'])
```
> ```'User name:ZEOxO ID:123456 addr:Taipei'```
## 8.其他常用及特殊的 String 操作
* <font color="#0080FF">**repr()、str()將物件轉換成字串表示**</font>
```python=+
repr([1,2,3])
x = [1]
x.append(2)
x.append([3,4])
'the list x is ' + repr(x)
```
> ```'[1, 2, 3]'```</br>
> ```'the list x is [1, 2, [3, 4]]'```
##
* <font color="#0080FF">**repr() 傳入物件參數**</font>
> <font color="#EA0000">**<!>repr非常適合用來程式除錯**</font>
```python=+
repr(print)#將系統內建方法、物件作為參數傳入
repr(str.upper)
```
> ```'<built-in function print>'```</br>
> ```'<method 'upper' of 'str' objects>'```
##
* <font color="#0080FF">**(續)repr() 傳入物件參數**</font>
```python=+
from datetime import datetime
now = datatime.now()
now
str(now)
repr(now)
```
> ```'2020-08-26 15:18:40.695042'```</br>
> ```'2020-08-26 15:18:40.695042'```</br>
> ```'datetime.datetime(2020, 8, 26, 15, 18, 40, 695042)'```
##
* <font color="#0080FF">**repr() 的文字範例**</font>
```python=+
tb="物品\t數量\t售價\n蘋果\t1\t25"
print(tb)
print('\n')
print(repr(tb)) #可以看到格式字符
```
> ```物品 數量 售價```</br>
>```蘋果 1 25```</p>
> ```'物品\t數量\t售價\n蘋果\t1\t25'```
## 9.Python 字串模組
* <font color="#0080FF">**<!>被 Python 定義的空白字元**</font>
```python=+
import string
string.whitespace #可透過存取「string.whitespace」常數找到
' \t\n\r\v\f' #指的就是這些字元符號
```
> ```' \t\n\r\x0b\x0c'```</br>
> ```' \t\n\r\x0b\x0c'```
##
* <font color="#0080FF">**(!)其他被 Python 定義的字元**</font>
```python=+
import string
string.digits
string.hexdigits
string.octdigits
string.ascii_lowercase
string.ascii_uppercase
string.ascii_letters #包含lowercase和uppercase所有字元
```
> ```'0123456789'```</br>
> ```'0123456789abcdefABCDEF'```</br>
> ```'01234567'```</br>
> ```'abcdefghijklmnopqrstuvwxyz'```</br>
> ```'ABCDEFGHIJKLMNOPQRSTUVWXYZ'```</br>
> ```'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'```
## 時間戳記
> [name=ZEOxO][time=Wed, Aug 26, 2020 16:00 PM][color=#907bf7]