1. 程式人生 > 實用技巧 >python字串和編碼

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'))  #阿依希德

參考來源