標籤:python 字串 % format bytes bytearray
字串是一個有序的字元的集合,用來儲存和表現基於文本的資訊,python的內建資料結構之一。字串是多個字元組成的序列,因此支援序列的相關操作。
支援的操作有:
1. 通過索引來訪問
>>> s = ‘this is a test string‘>>> len(s) #len()函數可以得到字串的長度21
得到字串的長度以後,就可以根據索引來訪問字串的內容。
>>>s[0] #正向索引‘t‘>>>s[-1] #反向索引時,索引值從右往左計數,從-1開始計數。‘g‘
2. 支援分區操作
>>>s[0:4]‘this‘>>>s[:4] #沒有左值,表示從第一個值開始‘this‘>>>s[0:]#沒有右值,表示從開始位置到最後一個值‘this is a test string‘>>> s[::2]#有步進值2,表示每隔2個取一個值。‘ti sats tig‘
3. 支援兩個字串相加
>>>s = s + ‘ xyz‘>>>s‘this is a test string xyz‘
字串具有的相關屬性:字串變數定義裡以後,字串內的字元不可改變。
常用的字串方法
| find |
在一個較長的字串中尋找子字串並返回字串所在位置的最左端索引,沒有則返回-1 |
| join |
在隊列中添加元素 |
| lower |
返回字串的小寫字母片 |
| replace |
返回某字串的所有匹配項被替換之後得到的字串 |
| split |
將字串分割成序列 |
| strip |
返回去除兩側空格的字串 |
| translate |
替換單個字元,進行多個替換。 |
| join |
‘ ‘.join(str)在字串str的每個元素之間插入分隔字元 ‘ ‘,‘ ‘也可以替換為其他字元 |
| ord |
將一個字元轉換成對應的ASCII值 |
| rstrip |
去掉最右邊空格的字串 |
| chr |
將整數字串轉換成對應的字元 |
除了上面那些內建方法外,Python標準庫re模組支援更進階的基於模式的字串處理,還有更進階的文本處理工具,如XML解析器。
字串種類
字串和數位轉換:
int() 方法將字串轉換為數字
str() 方法將數字轉換為字串
ord(s) 方法講字串轉換為對應的ASCII碼
chr(n) 方法講ASCII數字轉換味對應的字元。
字串格式化(最重要的內容)
1. 格式化運算式,使用print或printf輸出,基本格式如下:
"%[(name)][flags][width][.precision] typecode" % 要輸出的內容
欄位含義如下:
(name)表示根據名稱自動解析後面的對象,講name對應的值顯示出來
樣本:
print(‘%(n)d, %(x)s‘ % {"n":1, "x":"spam"})‘1, spam‘
flags 轉換標誌,- 表示靠左對齊,+ 表示在轉換值前面加上加號或減號,0表示轉換值寬度不夠時用0填充。
width 輸出字串的寬度
.precision 輸出小數時,數位位元,當precision為*號時,表示小數位元由後面的值給出。
樣本:
print(‘%f, %.2f, %.*f‘ % (1/3.0, 1/3.0, 4, 1/3.0)‘0.33333, 0.33, 0.3333‘
typcode:printf style
字串格式化的typecode類型
| 轉換類型 |
含義 |
| d,i |
帶符號的十進位數 |
| o |
不帶符號的八位元 |
| u |
不帶符號的十進位數 |
| x |
不帶符號的十六進位(小寫) |
| X |
不帶符號的十六進位(大寫) |
| e |
科學計數法表示的浮點數(小寫) |
| E |
科學計數法表示的浮點數(大寫) |
| f,F |
十進位浮點數 |
| g |
如果指數大於-4或者小於精度值則和e相同,其他情況與f相同 |
| G |
如果指數大於-4或者小於精度值則和E相同,其他情況與F相 |
| c |
單字元(接收整數或單字元字串) |
| r |
字串(使用repr轉換任意Python對象) |
| s |
字串(使用str轉換任意Python對象) |
| a |
ASCII字元 |
| % |
顯示% |
(name)表示使用字典來格式化字串,使用字典格式化的時機:
1. 需要格式化的內容反覆出現
2. 需要格式化內容很多
name對應字典的key,相當於輸出dict[name]
2. 格式化調用方法——format方法
: 號後面依次是填充字元,對齊,輸出寬度。。標準格式是:
"{[field_name]![conversion]:[[fill][align]][sign][#][0][width][,][.precision][typecode]}".format(‘test‘)
field_name 兩種形式,以0,1,2這樣的形式時,表示根據位置來尋找變數,以keyword形式時,表示字典格式化,對應字典中的索引值。
conversion 表示轉換格式,支援三種類型,分別是s|r|a,即str、repr、ascii三種格式的字串。
fill 填充字元,可以是除‘{‘、‘}‘外的任一字元
align 對齊
‘<‘ 靠左對齊
‘>‘ 靠右對齊
‘=‘ 數字對齊
‘^‘ 置中對齊
sign 僅針對數字類型
, 用來分隔數字,例如1,234.5
width 對齊寬度
.precision輸出小數時,輸出數位位元
typecode 輸出的對象格式,有以下值,和%格式化中的typecode含義一致:
"b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
樣本1:直接具體的數值
>>> ‘{0!s:-^40}‘.format(‘test‘)‘------------------test------------------‘>>> ‘{0!r:-^40}‘.format(‘test‘)‘-----------------‘test‘-----------------‘
樣本2:0做填充字元
>>> ‘{0!s:0^40}‘.format(‘test‘)‘000000000000000000test000000000000000000‘>>> ‘{0!r:0^40}‘.format(‘test‘)‘00000000000000000‘test‘00000000000000000‘
樣本3:變數
>>> ‘{0:{fill}{align}{width}}‘.format(‘test‘,fill=‘-‘,align=‘^‘,width=‘40‘)‘------------------test------------------‘
樣本4:數字位元(,號用於分隔數字)
>>> ‘{0:<40,.5}‘.format(1234.5678)‘1,234.6
‘
樣本5:type=b,顯示位元時。
>>> ‘{0:<10b}‘.format(42)‘101010‘
基本用法:
1. ‘{0},{1} ‘.format(‘value0‘,‘value1‘)
在裡{}裡的0,1是要輸出的變數,對應format裡的value0和value1,如果{}裡沒有編號,則輸出時依次輸出formt裡的內容。調整順序時對應的輸出也會調整,例如 ‘{1},{0} ‘.format(‘value0‘,‘value1‘)的輸出結果是value1,value0。
2. ‘{name},{age}‘.format(name=‘han‘,age=‘25‘)
在{}裡的變數名和format裡的變數名對應,即使調換順序也不影響
‘{name},{age}‘.format(age=25,name=‘han‘)
和上面的輸出結果一樣
注意事項:
在format格式化的過程中,盡量指定各個輸出值的位置,這樣有利於精準輸出
位置參數必須在關鍵字參數前面。
bytes(二進位格式,python3.x特有,python2.x裡不區分bytes和str)
bytes和str的區別在於bytes是byte的序列,而str是unicode的序列
b=str.encode()s=bytes.decode()
bytes注意事項:
在encode()和decode()裡可以指定編碼轉換的格式,例如decode(‘utf-8‘)或decode(‘gbk‘)。應用於擷取網頁內容時得到不同編碼格式的網頁內容統一轉換成通用的Unicode格式,便於處理。不同網頁的內容需要通過第三方庫來猜測網頁的編碼格式。
網路編程socket資料轉送的是bytes格式,發送之前需要用encode()函數將其轉換為bytes格式,在接收後需要使用decode()函數將接收到的資料轉換為UTF8格式。過程如下:
資料str encode bytes->網路傳輸 ->bytes decode 資料str
import sysreload(sys)sys.setdefaultcoding(‘utf-8‘)
Unicode指的是編碼規範,類似於http協議,而GBK,UTF-8類似於apache、nginx,是字元集編碼,是對Unicode的支援和實現。bytes一般用於網路資料轉送,而str一般用於程式之間的資料處理。因此在網路編程中,資料轉送之前,一般要講str轉換成bytes,服務端在接收到bytes以後,要用decode()函數再轉換成str。
bytearray(和bytes類型類似,但是bytearray中內容可變,bytes類型中的資料不可變)
bytearray用於改變bytes的內容,具體過程如下:
b1=b‘1234‘b2=bytearray(b1)b2[0]=int(b‘6‘.hex(),16)bytes(b2)
輸出b‘6234‘
此時就得到改變後的b1
本文出自 “無飛天下” 部落格,請務必保留此出處http://hf1208.blog.51cto.com/8957433/1881648
python第二周 字串