1 字符編碼
python中的編碼采用的是Unicode編碼。
什么是編碼?
就是數(shù)字和字符的一一對應的,其中字符對應數(shù)字就是字符的編碼尼酿。
編碼方式
ASCII碼表:針對數(shù)字字符、字母字符植影、一些英文中常用的符號進行編碼
大寫字母編碼小于小寫字母編碼裳擎;大寫字母編碼和小寫字母編碼之間不是連續(xù)的
采用一個字節(jié)對字符進行編碼(128個字符)
Unicode碼:Unicode碼包含了ASCII碼表,同時能夠?qū)κ澜缟纤姓Z言對應的符號進行編碼
采用兩個字節(jié)對字符進行編碼思币,能編碼65536個字符鹿响。
兩個函數(shù)
chr(編碼值)-將字符編碼轉(zhuǎn)換成字符
中文編碼范圍:4E00-9FA5(十六進制)
ord(字符)-獲取字符對應的編碼值羡微。
可以將字符編碼放到字符串中表示一個字符:\u+4位的16進制編碼值。
print('abc\u4f59123')
2獲取字符串中的字符
一旦一個字符串確定惶我,那么字符串中每個字符的位置就確定妈倔。
而且每個字符會對應一個用來表示其位置和順序的下標值。
2.1 下標(索引)
字符串中的每個字符都有一個下標绸贡,代表其在字符串中的位置盯蝴;
下標的范圍是:0~字符串長度減一 (0代表第一個字符的位置);
-1~負的字符串長度(-1代表最后一個字符的位置)听怕。
2.2 獲取單個字符
語法:字符串[下標] -獲取字符串中指定下標對應的字符捧挺;
說明:字符串 - 可以是字符串常量,也可以是字符串變量(只要結(jié)果是字符串就行)
[]-固定寫法
下標-字符的下標尿瞭,不能越界闽烙。
'abc'[1]
str1 = 'abc'
str1[1]
2.3 獲取部分字符
2.3.1 法一
語法:字符串[開始下標:結(jié)束下標:步長]
開始下標、結(jié)束下標-寫字符下標值
[ : : ]固定寫法
步長-整數(shù)
功能:從開始下標獲取到結(jié)束下標前為止声搁,每次下標值增加步長黑竞。
注意:
當步長是正數(shù)(從前往后取)疏旨,開始下標對應的字符要在結(jié)束下標對應的字符前面
當步長是負數(shù)(從后往前忍堋),開始下標對應的字符要在結(jié)束下標對應的字符后面
結(jié)束下標對應的值取不到的充石。
2.3.2 法二:
語法:字符串[開始下標:結(jié)束下標](相當于步長是1)
''空串
' '空格
str1 = 'qwerqerut'
print(str1[0:9:3], str1[-1:5:-1])
2.4獲取部分字符 ,省略下標
獲取部分字符的時候霞玄,開始下標和結(jié)束下標都可以省略
2.4.1開始下標省略
字符串[:結(jié)束下標:步長]或者字符串[:結(jié)束下標]
步長為正骤铃,從字符串開頭往后獲取坷剧;步長為負惰爬,從字符串結(jié)尾往前獲取
2.4.2結(jié)束下標省略
字符串[開始下標::步長]或者字符串[開始下標:]
步長為正,從開始下標從前往后獲取到字符串結(jié)束惫企;步長為負撕瞧,從開始下標從后往前獲取到字符串開頭
2.4.3開始下標,結(jié)束下標都省略
字符串[: :步長]或者字符串[:]
步長為正狞尔,從開頭獲取到字符串結(jié)尾丛版;步長為負,從字符串結(jié)尾獲取到開頭
獲取字符串中的多個字符偏序,開始下標和結(jié)束下標都可以越界页畦,但獲取單個字符下標不能越界。
print(str1[-100:100])
3 字符串相關(guān)運算
3.1 加(+)
字符串1+字符串2:將兩個字符串拼接在一起產(chǎn)生一個新的字符串
注意:字符串相加研儒,加號兩邊必須都是字符串豫缨。
3.2 乘(*)
字符串*n(正整數(shù)):字符串的內(nèi)容重復n次独令,產(chǎn)生一個新的字符串。
print(('#' * 5 + '$' * 7) * 5)
3.3 比較運算符:>,<,==,!=,>=,<=
3.3.1 ==好芭,燃箭!=
字符串1 == 字符串2 -判斷兩個字符串是否相等.
3.3.2 >,<
字符串比較大小,是用編碼值進行比較舍败;用第一對不同的字符進行編碼值大小比較招狸。
char = "二"
print(chr(0x4E00) <= char <= chr(0x9FA5))
print('\u4E00' <= char <= '\u9FA5')
print(0x4E00 <= ord(char) <= 0x9FA5)
3.4.in和not in
字符串1 in 字符串2:判斷字符串2中是否包含字符串1,結(jié)果是布爾值瓤湘。
字符串1 not in 字符串2:判斷字符串2中是否不包含字符串1瓢颅,結(jié)果是布爾值。
3.5 len函數(shù)
len(序列)
len(字符串)-獲取字符串中字符的個數(shù)弛说。
3.6 str
str(數(shù)據(jù)):將數(shù)據(jù)轉(zhuǎn)換成字符串
3.6.1:其他數(shù)據(jù)轉(zhuǎn)換成字符串:
所有的類型的數(shù)據(jù)都可以轉(zhuǎn)換成字符串.轉(zhuǎn)換的時候就是在數(shù)據(jù)的值的最外面直接加引號挽懦。
補充:系統(tǒng)數(shù)據(jù)類型名不能用來給變量命名。
3.6.2字符串轉(zhuǎn)其他類型
字符串轉(zhuǎn)整數(shù):int(字符串),只有去掉引號后剩下的部分本身就是一個整數(shù)的字符串才能轉(zhuǎn)換成整型
字符串轉(zhuǎn)浮點型:float(字符串)木人,只有去掉引號后剩下的部分本身就是一個整數(shù)或者小數(shù)的字符串才
能轉(zhuǎn)換成浮點型(去掉后為帶e的科學計數(shù)法也可以轉(zhuǎn))
字符串轉(zhuǎn)布爾:bool(字符串)信柿,只有空串''會轉(zhuǎn)換成False,其他所有的字符串都會轉(zhuǎn)換成True.
print(bool(''), bool(""), bool('False')) # False False True醒第。
4 格式字符串
4.1 格式字符串
指的是字符串中通過格式占位符來表示字符串中變化渔嚷,然后后面再通過其他的值來給占位符賦值
語法:
含有格式占位符的字符串%(占位符對應的值)
格式占位符--有固定的寫法;可以有多個稠曼。
% --固定寫法
() - 里面的值的個數(shù)和值的類型和前面的格式占位符一一對應形病。
4.2 常見格式占位符
%d -- 整數(shù)
%s -- 字符串
%.nf -- 浮點數(shù)(保留小數(shù)點后n位小數(shù))
%c -- 字符(可以將數(shù)字轉(zhuǎn)換成字符)
name = input('名字:')
message = '%s,今年%d歲,體重:%.2fkg 血型是:%c'%(name,20,55,97)
print(message)
5 字符串常用方法
涉及到對字符串功能進行修改都是產(chǎn)生的一個新的字符串霞幅,原字符串沒有發(fā)生改變漠吻。
5.1 字符串首字母大寫
字符串.capitalize()-將字符串首字母轉(zhuǎn)換成大寫.
str1 = 'hello'
new_str = str1.capitalize()
print(new_str) # Hello
5.2 字符串對齊
1.字符串.center(width,fillchar) - 居中
2.字符串.ljust(width,fillchar) - 左對齊
3.字符串.rjust(width,fillchar) - 右對齊
width - 正整數(shù),表示新的字符串的寬度
fillchar - 字符司恳,填充的字符途乃,默認為空格
4.字符串.zfill(width) -右對齊,前面填0
str1 = '123'
new_str1 = str1.center(7, '*') # **123**
new_str2 = str1.ljust(7, '*') # 123****
new_str3 = str1.rjust(7, '*') # ****123
new_str4 = str1.zfill(7) # 0000123
print(new_str1, new_str2, new_str3, new_str4)
產(chǎn)生隨機數(shù)
import random # 導入隨機數(shù)對應的模塊
num = random.randint(0, 99) # 產(chǎn)生一個0~99的隨機整數(shù)
new_num='python1808'+str(num).rjust(3,'0')
print(new_num)
5.3 統(tǒng)計字符串2在字符串1中出現(xiàn)的次數(shù)
字符串1.count(字符串2)
str1 = 'asdeadfaadre'
str2 = 'a'
print(str1.count(str2)) # 4
5.4 檢查是否以指定字符結(jié)尾和開頭
1.檢查是否以指定字符結(jié)尾
字符串1.endswith(字符串2扔傅,beg=0,end=len(字符串1)) beg代表開始檢查的位置耍共,end代表結(jié)束檢查的位置
2.檢查是否以指定字符開始
字符串1.startswith(字符串2,beg=0猎塞,end=len(字符串1))
str1 = 'asdeadfaadre'
str2 = 'f'
print(str1.endswith(str2, 2, 7),str1.endswith(str2)) # True False
print(str1.startswith(str2,0,len(str1))) # False
5.5把tab換為空格
把字符串1 中的 tab 符號轉(zhuǎn)為空格试读,tab 符號默認的空格數(shù)根據(jù)設置而定 。
字符串1.expandtabs(tabsize=8)
s='qwe\tqwr'
print(s,len(s.expandtabs(tabsize=2))) #qwe qwr 7
5.6檢查字符串2是否包含在字符串1中的指定范圍內(nèi)
1.字符串1.find(字符串2荠耽,beg=0,end=len(字符串1)) #從左邊開始查找鹏往,如果包含返回開始的索引值(下標),否則返回-1
2.字符串1.index(字符串2,beg=0,end=len(string)) #跟find一樣伊履,不過如果沒有韩容,會報錯
3.字符串1.rfind(字符串2,beg=0,end=len(字符串1))#跟find一樣唐瀑,不過是從右邊開始查找
4.字符串1.rindex(字符串2群凶,beg=0,end=len(string)) #跟index一樣,不過是從右邊開始查找
str1 = 'asdreadfaadre'
str2='ad'
print(str1.find(str2,0,len(str1))) #5
print(str1.rfind(str2,0,len(str1))) # 9
print(str1.rindex('dr',0,len(str1))) # 10
print(str1.index('z',0,len(str1))) # ValueError: substring not found
5.7 判斷字符串的組成成分
1.判斷字符串是否由字母或數(shù)字組成
字符串1.isalnum()
2.判斷字符串的字符是否由純字母組成
字符串1.isalpha()
3.判斷字符串是否由純數(shù)字組成
字符串1.isdigit()
str1 = 'asdeadfaadre'
str2='1234'
str3='12ab'
str4='abc#123'
print(str1.isalnum(),str2.isalnum(),str3.isalnum(),str4.isalnum()) # True True True False
str1 = 'asADdre';str2='as123'
print(str1.isalpha(),str2.isalpha()) # True False
str1='123a123';str2='123'
print(str1.isdigit(),str2.isdigit()) #False True
5.8 判斷字符串中字母的大小寫
1.判斷字符串中出現(xiàn)的字母是否全由小寫字母構(gòu)成
字符串1.islower()
2.判斷字符串中出現(xiàn)的字母是否全由大寫字母構(gòu)成
字符串1.isupper()
str1 = 'as壹23';str2='As123'
print(str1.islower(),str2.islower()) # True False
str1='A12以';str2='A12cd'
print(str1.isupper(),str2.isupper()) # True False
5.9 判斷字符串是否由純數(shù)字構(gòu)成(中文數(shù)字也可以)
字符串1.isnumeric()
str1='123abc';str2='123壹一1'
print(str1.isnumeric(),str2.isnumeric()) # False True
5.10 判斷字符串是否由純空白字符組成
字符串1.isspace()
str1 = ' ';str2=''
print(str1.isspace(),str2.isspace()) # True False
5.11 字符串標題化操作
1.判斷字符串是否是標題化的
字符串1.istitle()
2.返回標題化的字符串(所有單詞都以大寫開始哄辣,其他為小寫)
字符串1.title()
str1='Abc bcd ';str2='A12'
str3='AbD bcd';str4='ab12'
print(str1.istitle(),str2.istitle()) # False True
print(str3.title(),str4.title()) # Abd Bcd Ab12
5.12 將字符串2的每個字符分開并在之間插入指定的字符串1
字符串1.join(字符串2)
str1='123';str2='a#*&'
print(str1.join(str2)) # a123#123*123&
5.13 字符串中字母的大小寫轉(zhuǎn)換
1.轉(zhuǎn)換字符串中所有大寫字符為小寫请梢。
字符串1.lower()
2.將字符串中大寫轉(zhuǎn)換為小寫,小寫轉(zhuǎn)換為大寫力穗。
字符串1.swapcase()
3.將字符串中的小寫字母轉(zhuǎn)換為大寫毅弧。
字符串1.upper()
str1='ABCdef';str2='ABC12壹'
print(str1.lower(),str2.lower()) # abcdef abc12壹
print(str1.swapcase(),str2.swapcase()) # abcDEF abc12壹
print(str1.upper(),str2.upper()) # ABCDEF ABC12壹
5.14 截掉字符串的首位或者末位
截掉字符串首位的空格或指定字符
字符串1.lstrip()
刪掉字符串末尾的空格或指定字符
字符串1.rstrip()
刪掉字符串首位和末尾的空格或字符
字符串1.strip()
str1='cdabedsc';str2=' aafqweqa '
print(str1.lstrip('c'),str2.lstrip()) #dabedsc aafqweqa
print(str1.rstrip('c'),str2.rstrip()) #cdabeds aafqweqa
print(str1.strip('c'),str2.strip()) #dabeds aafqweqa
5.15 尋找字符串中的最大最小編碼字符
返回字符串中最大的字母(ascii碼最大的編碼)
max(字符串1)
返回字符串中最小的字母(ascii碼最小的編碼)
min(字符串1)
str1='ABaQbZ';str2='abcAB6c'
print(max(str1),min(str1),min(str2)) # a A 6
5.16 字符串替換
把字符串中的指定部分替換成另一部分,替換次數(shù)可設定
字符串1.replace(字符串2当窗,字符串3够坐,num)
str1='acdabwafada'
print(str1.replace('a', "1", 3)) #1cd1bw1fada
5.17 以指定字符串為分隔符截取字符串,截取個數(shù)可指定
字符串1.split(字符串2崖面,num=字符串1.count(字符串2))
str1='abcdabwasabweab'
print(str1.split('ab',str1.count('ab')),str1.split('ab',2)) #['', 'cd', 'was', 'we', ''] ['', 'cd', 'wasabweab']
5.18 按照行(\n,\r,\n\r)分隔元咙,產(chǎn)生一個新的字符串
按照行(\n,\r,\n\r)分隔,產(chǎn)生一個新的字符串巫员;如果參數(shù)為True庶香,保留換行符;為False简识,不包含換行符赶掖。
字符串1.splitlines(參數(shù))
str1='\n123\rabc\r\nqwe'
print(str1.splitlines(True)) # ['\n', '123\r', 'abc\r\n', 'qwe']
print(str1.splitlines(False)) # ['', '123', 'abc', 'qwe']
5.19 檢查字符串中是否只包含十進制的字符
檢查字符串中是否只包含十進制的字符
字符串1.isdecimal()
str1='12ab12';str2='123987';str3='123Ⅰ23'
print(str1.isdecimal(),str2.isdecimal(),str3.isdecimal()) # False True False