python第二周 字串

來源:互聯網
上載者:User

標籤: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解析器。


字串種類

  • 單引號、雙引號和三引號代表的字串相同

  • 逸出字元,常見的有\n,\t,\\,\‘,\"

  • raw字串:r"c:\new\test.spam",此時會抑制轉移字元,使得字串僅代表字面上的意思。但是raw字串不能以單個 \ 結尾。

  • Bytes字串:b‘sp\x01am‘

  • Python2中的Unicode字串:u‘eggs\u0020spam‘,python3中預設字串就是Unicode字串。


字串和數位轉換:

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     僅針對數字類型

  • ‘+‘ 表示正負數都要帶上符號

  • ‘-‘ 表示負數要帶上符號,預設選項

  • space 表示正數前面要帶一個空格,負數前面帶‘-‘號

,     用來分隔數字,例如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

  • python2.7轉換編碼格式

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第二周 字串

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.