python字串和編碼
一.字串
1.字串常見操作
拼接字串
採用"+"號來拼接字串,但是不能直接與其他資料型別拼接,需要str()來轉換。
num1 = 11111
str1 = 'heiheihei'
print(str1+str(num1))
'''
輸出
heiheihei11111
'''
計算字串長度
len(str)
擷取字元
str[start:end:step]
分割字元
''' 語法: str.split(sep,maxsplit) sep:指定用來分隔的字元,可以指定多個,預設為None,即所有的空字元,(包括空格,換行符'\n',製表符 '\t'等 ''' str="hello boy<[www.doiido.com]>byebye" print(str.split("[")[1]) ''' 輸出 www.doiido.com]>byebye ''' print(str.split("[")[1].split("]")[0]) ''' 輸出 www.doiido.com '''
合併字元
'''
str_new = string.join[iterable]
string : 字串型別,用於指定合併時的分隔符
iterable : 可迭代型別,被合併的物件
'''
list = ['baidu','taobao','jindong','tianmao']
str = '===='.join(list)
print(str)
'''
輸出 baidu====taobao====jindong====tianmao
'''
2.檢索字串
count()方法
用於檢索一個字元在另一個字串中出現的次數,返回出現的次數,如果沒有返回0
str.count(sub[,start[,end]]) ''' sub:要檢索的字元 '''
find()方法
用於檢索一個字元是否在另一個字串中存在,如果存在返回首次出現的索引,如果沒有返回-1
str.find(sub[,start[,end]])
index()方法
用法和find()一樣,不同點,如果要檢索的字元不存在,那麼會丟擲異常。
startswith()方法
用來檢索某個字串是否以某個字元開頭
str.startswith(prefix[,start[,end]])
endswith()方法
用來檢索某個字串是否以某個字元結尾
str.endswith(suffix[,start[,end]])
3.字元大小寫轉換
lower()方法
將某個字元全部轉換為小寫字元
str.lower()
upper()方法
將某個字元全部轉換為大寫字元
str.upper()
4.去除字串左右兩側的特殊字元
strip()方法
用於去掉字串左右兩側的空格和特殊字元
str.strip([chars])
'''
chars: 可選引數,指定要去除左右兩邊的字元,預設為空格,換行符'\n'等
'''
lstrip()和rstrip()方法
用於指定去除左側或者右側的特殊字元,用法和strip一樣
5.字串的格式化
format()方法
str.format(args)
'''
str : 模板
args : 要傳入的引數
'''
demo
# 1、按照預設順序,不指定位置
print("{} {}".format("hello","world") )
# 輸出 hello world
# 2、設定指定位置,可以多次使用
print("{0} {1} {0}".format("hello","or"))
# 輸出 hello or hello
# 3、使用字典格式化
person = {"name":"lc-snail","age":18}
print("My name is {name} . I am {age} years old .".format(**person))
#輸出 My name is lc-snail . I am 18 years old .
# 4、通過列表格式化
stu = ["lc-snail","linux","js","Python"]
print("My name is {0[0]} , I love {0[3]} !".format(stu))
#輸出 My name is lc-snail , I love Python !
二.編碼
1.常見編碼
編碼 | 支援語言 | 大小 |
---|---|---|
ASCII | 英文 | 1個位元組 |
Unicode | 所有語言 | 2個位元組(生僻字4個) |
UTF-8 | 所有語言 | 1-6個位元組,英文字母1個位元組,漢字3個位元組,生僻字4-6個位元組 |
總結一下現在計算機系統通用的字元編碼工作方式:
在計算機記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。
用記事本編輯的時候,從檔案讀取的UTF-8字元被轉換為Unicode字元到記憶體裡,編輯完成後,儲存的時候再把Unicode轉換為UTF-8儲存到檔案:
瀏覽網頁的時候,伺服器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器:
2.python字元編碼
Python的字串型別是str
,在記憶體中以Unicode表示,一個字元對應若干個位元組。如果要在網路上傳輸,或者儲存到磁碟上,就需要把str
變為以位元組為單位的bytes
。
str 型別的資料型別帶有雙引號或者單引號;
'ABC'
bytes型別的資料用帶b字首的單引號或雙引號表示;
b'ABC'
要注意區分'ABC'和b'ABC',前者和後者雖然內容顯示得和前者一樣,但bytes的每個字元都只佔用一個位元組。
encode()方法 —— 編碼
encode()方法可以用指定編碼方式把str轉換成為bytes型別,也稱為編碼。
str.encode([encoding='編碼方式'] [,errors='strict'])
'''
encoding: 用來指定編碼方式,可以忽略encoding,直接寫'編碼方式'
errors:用來指定在遇到非法字元是的處理方式
'''
demo
str = '阿依希德魯'
print(str.encode('utf-8'))
# utf-8 輸出 b'\xe9\x98\xbf\xe4\xbe\x9d\xe5\xb8\x8c\xe5\xbe\xb7\xe9\xb2\x81'
print(str.encode('gbk'))
# gbk 輸出 b'\xb0\xa2\xd2\xc0\xcf\xa3\xb5\xc2\xc2\xb3'
反過來,如果我們從網路或磁碟上讀取了位元組流,那麼讀到的資料就是bytes
。要把bytes
變為str
,就需要用decode()
方法:
decode()方法 —— 解碼
decode方發用於將二進位制資料轉換為字串
str.decode([encoding='utf-8'] [,errors='strict'])
demo
bytA = b'\xe9\x98\xbf\xe4\xbe\x9d\xe5\xb8\x8c\xe5\xbe\xb7\xe9\xb2\x81'
print(bytA.decode('utf-8')) #阿依希德魯
bytB = b'\xb0\xa2\xd2\xc0\xcf\xa3\xb5\xc2\xc2\xb3'
print(bytB.decode('gbk')) #阿依希德