Python字符串
字符串類型在Python中是最流行的。可以通過在引號包圍的字符簡單地創建它們。Python使用單引號和雙引號來表示字符串是一樣的。
創建字符串很簡單,隻要將值分配給一個變量。例如:
var1 = 'Hello World!' var2 = "Python Programming"
訪問字符串值:
Python不支持字符類型;這些都被視為一個長度的字符串,因此也被認為是一個子串。
要訪問子字符串,用方括號隨著指數或索引來獲得子切片。下麵是一個簡單的例子:
#!/usr/bin/python var1 = 'Hello World!' var2 = "Python Programming" print "var1[0]: ", var1[0] print "var2[1:5]: ", var2[1:5]
當執行上麵的代碼中,產生以下結果:
var1[0]: H var2[1:5]: ytho
更新字符串:
可以在“更新”現有的由(重新)分配一個變量賦值給另一個字符串的字符串。新的值可以與它以前的值或一個串完全不同。下麵是一個簡單的例子:
#!/usr/bin/python var1 = 'Hello World!' print "Updated String :- ", var1[:6] + 'Python'
當執行上麵的代碼中,產生以下結果:
Updated String :- Hello Python
轉義字符:
下表是未轉義非打印字符的列表,可以用反斜線符號來表示。
轉義字符被解釋;在一個單引號和雙引號字符串。
反斜線
符號
|
十六進製
字符
|
描述 |
---|---|---|
a | 0x07 | 鈴聲或警報 |
0x08 | 退格鍵 | |
cx | Control-x | |
C-x | Control-x | |
e | 0x1b | 轉義 |
f | 0x0c | 換頁 |
M-C-x | Meta-Control-x | |
0x0a | 新一行 | |
nn | 八進製表示法,其中n的範圍為0.7 | |
0x0d | 回車 | |
s | 0x20 | 空格 |
0x09 | Tab鍵 | |
v | 0x0b | 垂直製表 |
x | 字符x | |
xnn | 十六進製表示法,其中n的範圍是從0.9,a.f,或AF |
字符串特殊操作符:
假設字符串變量中保存'Hello'和變量b持有'Python':
操作符 | 描述 | 例子 |
---|---|---|
+ | 串聯- 對操作符的兩側值增加 | a + b 的值為 HelloPython |
* | 重複 - 創建新的字符串,鏈接相同的字符串的多個副本 | a*2 的值為 -HelloHello |
[] | 切片- 從給定的索引字符指定 | a[1] 的值為 e |
[ : ] | 範圍切片 - 給定的範圍內的字符 | a[1:4] 的值為 ell |
in | 成員 - 如果一個字符存在給定的字符串中,則返回true | H in a 結果值為 1 |
not in | 成員 - 如果輸入的字符不給定的字符串中不存在,則返回true | M not in a 結果值為 1 |
r/R | 原始字符串- 禁止轉義字符的實際意義。語法原始字符串是完全一樣的普通字符串,除了原始的字符串運算符,字母“r”,這之前的引號。在“r”可以小寫(r)或大寫字母(R)的,必須立即放置在第一引號前麵。 | print r' ' 打印 並且 print R' ' 打印 |
% | 格式 - 執行字符串格式化 | 請參閱下一節 |
字符串格式化操作:
Python最酷的功能是字符串格式運算符%。這種操作是唯一的字符串,彌補了C語言的printf()係列函數功能。下麵是一個簡單的例子:
#!/usr/bin/python print "My name is %s and weight is %d kg!" % ('Zara', 21)
當執行上麵的代碼中,產生以下結果:
My name is Zara and weight is 21 kg!
下麵是完整的,它可以與%符號使用列表:
格式符號 | 轉換 |
---|---|
%c | 字符 |
%s | 通過str() 字符串轉換來格式化 |
%i | 有符號十進製整數 |
%d | 有符號十進製整數 |
%u | 無符號十進製整數 |
%o | 八進製整數 |
%x | 十六進製整數(小寫字母) |
%X | 十六進製整數(大寫字母) |
%e | 索引符號(小寫'e') |
%E | 索引符號(大寫“E”) |
%f | 浮點實數 |
%g | %f和%e 的簡寫 |
%G | %f和%E的簡寫 |
其他支持的符號和功能如下表:
符號 | 功能 |
---|---|
* | 參數指定寬度和精度 |
- | 左對齊 |
+ | 顯示符號 |
<sp> | 一個正數前留一個空格 |
# | 添加前導零('0')或十六進製前導0x“或”0X“,取決於”x“或”X“是否使用八進製。 |
0 | 從鍵盤左邊添加零(而不是空格) |
% | '%%'給留下一個文字'%' |
(var) | 映射變量(字典參數) |
m.n. | m是最小的總寬度和n是數字,顯示小數點後的位數(如果appl) |
三重引號:
Python三重引號允許字符串跨越多行,包括逐字換行符,製表符和其他特殊字符。
三重引號語法由三個連續的單引號或雙引號。
#!/usr/bin/python para_str = """this is a long string that is made up of several lines and non-printable characters such as TAB ( ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ ], or just a NEWLINE within the variable assignment will also show up. """ print para_str;
當執行上麵的代碼中,產生以下結果。請注意如何每一個特殊字符被轉換到打印形式,一直到最後的換行符之間的字符串“up”結束閉三重引號。還要注意的是發生或者使用顯式回車在一行或它的轉義代碼( n)的尾部的換行:
this is a long string that is made up of several lines and non-printable characters such as TAB ( ) and they will show up that way when displayed. NEWLINEs within the string, whether explicitly given like this within the brackets [ ], or just a NEWLINE within the variable assignment will also show up.
原始字符串不把反斜杠作為一個特殊字符。把一個原始字符串的每個字符保持寫的方式:
#!/usr/bin/python print 'C:\nowhere'
當執行上麵的代碼中,產生以下結果:
C: owhere
現在利用原始的字符串。我們表達如下:
#!/usr/bin/python print r'C:\nowhere'
當執行上麵的代碼中,產生以下結果:
C:\nowhere
Unicode字符串:
在Python普通字符串在內部存儲為8位ASCII,而Unicode字符串被作為16位Unicode存儲。這使得一組字符更加多樣化,包括大多數語言在世界上的特殊字符。限製處理Unicode字符串,注意以下幾點:
#!/usr/bin/python print u'Hello, world!'
當執行上麵的代碼,產生以下結果:
Hello, world!
正如你所看到的,Unicode字符串使用前綴 u,就像原始字符串使用前綴 r
字符串內置方法:
Python的包括以下內建的方法操作字符串:
SN | 方法及描述 |
---|---|
1 |
capitalize() 字符串的第一個字母大寫 |
2 |
center(width, fillchar) 返回一個空格填充字符串為中心,以總寬度列的原始字符串 |
3 |
count(str, beg= 0,end=len(string)) 開始索引beg和結束索引結束str多少次出現在字符串或字符串的子串 |
4 |
decode(encoding='UTF-8',errors='strict') 使用注冊編碼的編解碼器的字符串進行解碼。編碼默認為默認的字符串編碼。 |
5 |
encode(encoding='UTF-8',errors='strict') 返回編碼字符串的字符串版本;對錯誤,默認是引發ValueError除非錯誤被賦予了“ignore”或“replace”。 |
6 |
endswith(suffix, beg=0, end=len(string)) 判斷字符串或字符串的一個子串(如果起始索引beg和給出end結束索引)與後綴結尾;如果是則返回true,否則為false, |
7 |
expandtabs(tabsize=8) 擴展選項卡中的字符串多個空格;如果未提供tab大小默認為每片8位 |
8 |
find(str, beg=0 end=len(string)) 確定str開始索引beg和end索引並返回索引,如果找到出現在字符串或字符串的子串,否則返回-1 |
9 |
index(str, beg=0, end=len(string)) 與find()一樣,但會引發一個異常如果str冇找到 |
10 |
isalnum() 如果string至少有1個字符,所有字符為字母數字則返回true,否則為false |
11 |
isalpha() 如果string至少有1個字符,所有字符都是字母,否則為false,則返回true |
12 |
isdigit() 如果字符串隻包含數字則返回true,否則為false |
13 |
islower() 如果字符串至少有1個字符,所有字符是小寫則返回true,否則為false |
14 |
isnumeric() 如果一個Unicode字符串隻包含數字字符則返回true,否則為false。 |
15 |
isspace() 如果字符串隻包含空格字符則返回true,否則返回false, |
16 |
istitle() 返回true如果字符串是正確的“首字母大寫”,否則為false |
17 |
isupper() 返回true如果字符串至少有一個小寫字符,所有字符符為大寫字母,否則返回false。 |
18 |
join(seq) 合並(會連接)序列seq元素連接成一個字符串的字符串表示形式,用分隔符的字符串 |
19 |
len(string) 返回字符串的長度 |
20 |
ljust(width[, fillchar]) 返回一個空格填充字符串,原始字符串左對齊,以總寬列 |
21 |
lower() 將所有大寫字母的字符串轉化為小寫 |
22 |
lstrip() 刪除字符串中的所有前導空格 |
23 |
maketrans() 返回要用於轉換功能的轉換表 |
24 |
max(str) 從字符串str返回的最大字母字符 |
25 |
min(str) 從字符串str返回最小字母字符 |
26 |
replace(old, new [, max]) 取代了舊的所有出現在字符串使用新的或max,如果給定max |
27 |
rfind(str, beg=0,end=len(string)) 與find()一樣,但反向搜索字符串 |
28 |
rindex( str, beg=0, end=len(string)) 與index()一樣,但反向搜索字符串 |
29 |
rjust(width,[, fillchar]) 返回一個空格填充字符串右對齊,以原始字符串總寬度列。 |
30 |
rstrip() 刪除字符串的所有行尾空白 |
31 |
split(str="", num=string.count(str)) 根據分隔符str (如果冇有提供空間)和子字符串返回分割字符串列表;分成最多num子字符串。 |
32 |
splitlines( num=string.count('
')) Splits string at all (or num) NEWLINEs and returns a list of each line with NEWLINEs removed |
33 |
startswith(str, beg=0,end=len(string)) 判斷字符串或字符串的一個子串(如果起始索引beg和end索引)開始字符串str;如果是則返回true,否則為false |
34 |
strip([chars]) 在字符串執行兩種lstrip()和rstrip() |
35 |
swapcase() 反轉大小寫,在字符串中的所有字母 |
36 |
title() 返回“標題大字”版本字符串,也就是所有的字以大寫,其餘為小寫 |
37 |
translate(table, deletechars="") 根據轉換表str(256字)轉換字符串,刪除那些del字符串 |
38 |
upper() 字符串小寫轉換為大寫字母 |
39 |
zfill (width) 返回leftpadded零合共寬字符原字符串;用於數字zfill()保留給予任何跡象(減去一個零) |
40 |
isdecimal() 如果一個Unicode字符串隻包含十進製字符則返回true,否則返回false |