字符串
有序的序列,是字符的集合python
使用單引號,雙引號,三引號引注的字符序列git
字符串是不可變對象,咱們看到的合併字符串,實際上是返回一個由原來兩個值複製後返回的值,會佔用新的空間。sql
從python3起,字符串是Unicode類型windows
s1 = 'string'api
s2 = '''this's a "string'''數組
s3 = r"hello \n aasdasd" :r和R表示忽略轉義app
s4 = R'windows \net'ide
sql = """select*from user where name='tom'""" :三引號內能夠換行函數
字符串元素支持下標訪問this
字符串中的空格也是一個字符串
有序,可迭代
l1=list(sql),將元素迭代放入列表
l2=[sql],將總體放入列表
join
鏈接可迭代對象,使用給定的字符串拼接,返回字符串,可迭代對象自己元素都是字符串。
"sting".join(iterable)-->str 返回字符串
','.join(map(str,range(10))),將1-9轉換爲字符串,用逗號分割。
map函數,map(function,iterable,...),根據提供的函數對指定序列作映射,對可迭代對象裏的每個元素進行處理,返回一個新列表。
print("\"".join(lst)) #分隔符是雙引號
print( "\n".join(lst))
'\n'.join('1','2','3')以\n分割,能夠打印時使用
字符串
+ -- > str :將兩個字符串鏈接,返回新的字符串。
字符串分割
spilt系 返回列表
split(sep=None,maxsplit=-1) ,
sep=None默認以空格字符串字符切割,多個空格以一個處理,\t\n\r都是空白字符。
maxsplit表示最大切的刀數,從左到右,默認-1表示能切多少切多少。
將字符串按照分隔符分割成若干字符,返回列表,若是沒有切割點,就返回整個字符串放入列表
注意轉義符。以\n分割表示將內容以換行符分割。
join與split是相反的一對操做
'\n'.join("@".join(['1','2','3']).split('@')+['4']) :將‘1‘’2’‘3’以‘@’鏈接,再以’@‘分割,再和’4‘相加返回新列表,以\n分割。
rsplit :倒切,從右至左分割,
splitlines(keepends=False) :以\n切割,沒有不切,keepends開啓時保留換行符,換行符有\r,\n,\r\n等
partition系 返回元組
:將字符串分割爲兩段,返回2段和分隔符元組,
可用來分割電話號碼,文件目錄。
空字符串做爲分隔符會報錯,必須指定分割符
rpartition:倒切,若是沒有切割符,就切成整個字符串和兩個空串
partition 和split 在小範圍使用較爲合適,一旦數據規模增大,就會形成空間佔用增大,每次切割都要返回新的列表。
字符串大小寫
upper :全大寫
lower :全小寫
判斷時使用 ,處理用戶輸入時可用
swapcase:交互大小寫
字符串排版
title() -- > str :標題單詞大寫,全部首字母大寫
capitalize() -- >str :首個單詞大寫
center(width[,fillchar]) --> str :居中,使用fillchar填充,width爲寬度
zfill(width) 打印寬度,居右用0填充
ljust(widht) -- > 左對齊
rjust(width) -- > 右對齊
以上所有在命令界面,在展現給客戶看時,要有交互界面,或者網頁上。
字符串修改
replace(old,new[,count]) -- >str
替換字符串中的字串爲新子串,返回新字符串,count表示替換次數,不指定就替換所有。
若是新字符串字符包含較多字符,在字符串檢測中,是一位一位後移的,不會後退,好比替換aaa中的aa,從左至右先換左邊的aa,第三個a不會從新計算前邊檢測過的。
strip([chars]) -- > str
從兩端去除指定字符集中的全部字符,若是chars沒有指定,取出兩端的空白字符,若是指定去除的字符串爲空格,則只除去空格,不是去除全部空白字符
一旦找到字符集中沒有的元素,就中止。
lstrip :從左端開始去除
rstrip :從右端開始去除
用來去除數據中的多餘字符,返回新字符串.
空串爲空,空白字符串爲有空白的字符串
字符串查找
find(sub,[,start[,end]])可指定區間,從左至右搜尋指定子串,找到返回正索引,不然返回-1
rfind(sub,[,start[,end]])從右至左查找子串sub,返回正索引,不然返回-1
找到第一個就返回索引,若是沒有就會遍歷
index(sub,[,start[,end]])-->int :可指定區間,在區間內從左至右查找字串,找到返回索引,不然拋出異常ValueError
rindex(sub,[,start[,end]])-->int :可指定區間,在區間內從右至左查找字串,找到返回索引,不然拋出異常ValueError
find 和 index 都是時間複雜度爲O(n),隨數據規模的增大,效率降低
len(string) :返回字符串長度,字符個數
字符串判斷
endswith(suffix[,start[,end]]) -- > bool :在指定區間判斷字符串是不是suffix結尾,返回波爾值
startswith(prefix[,start[,end]]) -- > bool :在指定區間判斷字符串是不是prefix,返回波爾值
find('www',0,3) :經常使用這種方式判斷開頭,不會遍歷
可用來判斷文件類型,是否以.txt.jpg.pdf等結尾,左閉右開區間
isalnum() --> bool 是否字母數字組成
isalpha() 是不是字母,其餘都不行
isdecimal() 是否只包含十進制數字
isdigit() 是否所有數字0~9
isidentifier() 是否字母下劃線開頭,其餘都是字母,數字,下劃線,判斷標識符
islower
isupper
isspace()是否只包含空白字符
字符串格式化
join拼接要使用分隔符,且要求拼接對象可迭代
+要求轉換非字符串格式爲字符串格式
printf-style formatting 來自C語言的printf函數
佔位符用%表示
%03d 表示打印三個位置,不夠前邊補零,d表示數字格式,s表示字符串格式
%3.2f 3表示寬度,位數大於寬度時,顯示位數,數字大小不能改變,.2表示精度,小數點後兩位,會四捨五入
%#x %#X 16進制,x表示小寫,X表示大寫
‘%-05d’ % 10 佔位5個寬,右側補零,若是沒有小數點,就補空格,沒有負號,就左側補零
能夠查手冊,關鍵字str method
format函數格式化字符串語法
'{}{xxx}'.format(*args,*kwargs)-->str
args位置參數,是一個元組
kwargs是關鍵字參數,是字典
花括號佔位符,{n}位置參數表示位置參數索引爲n的值
{xxx}表示在關鍵字參數中搜索名稱一致的,{{}}表示花括號
位置參數
’{}:{}‘.format('192.168.1.100',8888)按照位置對應
'{1}{0}'.format('a','b')輸出爲‘ba’
訪問元素 '{0[0]}.{0[1]}'.format(('magedu','com'))輸出爲magedu.com
訪問對象屬性
from collections import namedtuple
Point=namedtuple('Point','x y')
P=Point(4,5)
'{{{0.x},{0.y}}}'.format(P)
輸出{4,5}
對齊
'{0}*{1}={2:<02}'.format(3,2,2*3) 打印3*2=6,輸出後左移補零輸出爲‘3*2=60’
將0換爲#也能夠'{0}*{1}={2:#<2}'.format(3,2,2*3) ,輸出’3*2=6#‘
進制
"int{0:d};hex{0:x};oct{0:#o};bin{0:#b}".format(42) 輸出爲 'int42;hex2a;oct0o52;bin0b101010'
octets=[192,168,0,1]
'{:02X}{:02X}{:02X}{:02X}'.format(*octets)
輸出爲’C0A80001‘
浮點數
print('{:g}'.format(3**0.5)) 精度g,還能夠爲f 輸出 1.73205
print('{:3.3%}'.format(1/3))寬度爲三,小數點後三位 輸出 33.333%
寬度不能改變數值的大小
reversed(),從列表中倒着一個個的取出數據,列表不發生變化,.reverse()列表會發生變化
字節和字節數組
bytes :字節序列,不可變
bytearray :字節數組,可變
字符串與bytes :字符串是字符組成的有序序列,字符可使用編碼理解
bytes是字節組成的不可變序列
bytearray是字節組成的可變序列
編碼與解碼
字符串按照不一樣的字符集編碼encode返回字節序列bytes:
a.encode(encoding='utf-8', errors='strict') -->bytes
字節序列按照不一樣的字符集解碼decode返回字符串
bytes.decode(encoding='utf-8',errors='strict') -->str
bytearray.decode(encoding='utf-8',error='strict') -->str
ASCII:美國信息交換標準代碼
基於拉丁字母的一種單字節編碼系統
一個字節8位,共256種變化,從0-255,ASCII碼的0-127是經常使用
十六進制hex表示是,30是數字0,40是A的前一位,60是a的前一位
bytes定義
bytes()
bytes(int) 指定字節的bytes,被0填充
bytes(iterable_of_ints) -->bytes[0,255]的int組成的可迭代對象,超界報錯bytes must be in range(0, 256)左閉右開
bytes(string,encodeing[,errors]) -->bytes 等價於string.encode() eg: bytes('a',encoding='utf-8'),輸出爲b'a'
bytes(bytes_or_buffer) ->immutable copy of bytes_or_buffer 從一個字節序列或者buffer複製出一個新的不可變的bytes對象
使用b前綴定義
只容許基本ASCII使用字符形式b'ac99'
使用16進製表示b'\x41\x61'
bytes的操做和str相似
操做字節前邊必定要加b
replace,find,
bytes.fromhex(string) :string必須是兩個字符的十六進制的數,空格忽略
'abc'.encode().hex() 返回16進製表示的字符串,
索引b'abcdef'[2] 返回字節對應的數,int類型
bytearray
bytearray()空bytearray
bytearray(int) 指定字節的bytes,被0填充
bytearray(iterable_of_ints) -->bytes[0,255]的int組成的可迭代對象,超界報錯bytes must be in range(0, 256)左閉右開
bytearray(string,encoding[,errors]) 返回可變對象
注意,b前綴定義的是bytes類型
bytearray操做
replace,find
bytearray.fromhex(string) :string必須是兩個字符的十六進制的數,空格忽略
bytearray('abc'.encode()).hex 返回16進製表示的字符串
索引bytearray(b'abcdef')[2] 返回字節對應的數,int類型
append 尾部追加
insert(index,int) 在指定索引位置插入元素
extend(iterable_of_ints) 將一個可迭代的整數集合追加到當前bytearray
pop(index=-1) 彈出元素,默認尾部
remove(value) 找到第一個value移除,找不到拋異常
clear() 清空
reverse() 翻轉,就地修改
int.from_bytes(bytes,byteorder)
將字節數組表示成整數
int.to_bytes(length,byteorder)
將一個整數表達成指定長度的字節數組
i=int.from_bytes(b'abc','big')
print(i,hex(i)) #6382179 0x616263
print(i.to_bytes(3,'big')) #b'abc'
切片
線性結構(可迭代,可用len取長度,可經過下標訪問),就能夠切片
經過索引區間訪問線性結構的一段數據
sequence[start,stop]表示返回[start,stop]區間的子序列
[:] 表示從頭至尾,等效於copy()
步長切片
[start:stop:step]
step步長,能夠正負整數,默認1
step要和start:stop同向,不然返回空序列