python字符串詳解

python字符串詳解

字符串

字符串或串(String)是由數字、字母、下劃線組成的一串字符。一般記爲 s=“a1a2···an”(n>=0)。它是編程語言中表示文本的數據類型。 通常以串的整體作爲操作對象,如:在串中查找某個子串、求取一個子串、在串的某個位置上插入一個子串以及刪除一個子串等。兩個字符串相等的充要條件是:長度相等,並且各個對應位置上的字符都相等。
屬於python基本數據類型和結構的一種。2 本身是不可變的數據類型。 3 有很多內置的方法
字符串是 Python 中最常用的數據類型。我們可以使用引號('或")來創建字符串。

var1 = 'Hello World!'
var2 = "I love Python "

字符串基本操作

1.Python訪問字符串中的值

索引和切片
Python不支持單字符類型,單字符在 Python 中也是作爲一個字符串使用。
Python訪問子字符串,可以使用方括號來截取字符串.,當方括號中有三個參數,第三個代表步長(間隔)。

print ("var1[0]: ", , var1[0])
print ("var2[1:5]: ",, var2[1:5])
a ='123456789'
a[0:9:3]#從零到九,間隔三個取一個形成新的字符串。
# var1[0]: H
# love

下面這個代碼是針對上面切片和索引歸納的幾個實例

str = 'Hello World!'

print (str) # 輸出完整字符串
print (str[0] )# 輸出字符串中的第一個字符
print (str[2:5]) # 輸出字符串中第三個至第五個之間的字符串,操作:  str[star:end:sep]
print (str[2:] )# 輸出從第三個字符開始的字符串
print (str * 2) # 輸出字符串兩次
print( str + "TEST" )# 輸出連接的字符串

2.你可以對已存在的字符串進行修改,並賦值給另一個變量

var1 = 'Hello World!'
print( "更新字符串 :- ", var1[:6] + 'Runoob!')
## 運行結果:更新字符串 :-  Hello Runoob!

3.Python字符串格式化和原始字符串

  • Python 支持格式化字符串的輸出 。儘管這樣可能會用到非常複雜的表達式,但最基本的用法是將一個值插入到一個有字符串格式符 %s 的字符串中。
    在 Python 中,字符串格式化使用與 C 中 sprintf 函數一樣的語法。
print ("My name is %s and weight is %d kg!" % ('Zara', 21))  # 注意雙引號後還要加一個%
## 運行結果My name is Zara and weight is 21 kg!
  • python字符串格式化符號:
   符 號         描述
  %c     格式化字符及其ASCII碼
  %s     格式化字符串
  %d     格式化整數
  %u     格式化無符號整型
  %o     格式化無符號八進制數
  %x     格式化無符號十六進制數
  %X     格式化無符號十六進制數(大寫)
  %f     格式化浮點數字,可指定小數點後的精度
  %e     用科學計數法格式化浮點數
  %E     作用同%e,用科學計數法格式化浮點數
  %g     %f和%e的簡寫
  %G     %f 和 %E 的簡寫
  %p     用十六進制數格式化變量的地址
  • Python轉義字符:
 轉義字符        描述
\(在行尾時) 續行符
\\          反斜槓符號
\'          單引號
\"          雙引號
\a          響鈴
\b          退格(Backspace)
\e          轉義
\000        空
\n          換行
\v          縱向製表符
\t          橫向製表符
\r          回車
\f          換頁
\oyy        八進制數,yy代表的字符,例如:\o12代表換行
\xyy        十六進制數,yy代表的字符,例如:\x0a代表換行
\other      其它的字符以普通格式輸出
  • python 中的原始字符串
    原始字符串:所有的字符串都是直接按照字面的意思來使用,沒有轉義特殊或不能打印的字符。
    在Python中爲了使反斜槓和元字符取消字符的特殊功能,需要在字符前添加反斜槓。
    解決的辦法就是爲正則表達式使用 python 的 raw 字符串表示;在字符串前加個 “r” 反斜槓就不會被任何特殊方式處理,所以 r”\n” 就是包含”\” 和 “n” 的兩個字符,而 “\n” 則是一個字符,表示一個換行。正則表達式通常在 Python 代碼中都是用這種 raw 字符串表示。
    原始字符串除在字符串的第一個引號前加上字母“r”(可以大小寫)以外,與普通字符串有着幾乎完全相同的語法。
>>> '\n'
'\n'
>>> print( '\n')
>>> r'\n'
'\\n'
>>> print (r'\n')
\n

使用原始字符串,可以讓我們減少錯誤。
如下例子中,打開readme.txt時出現異常,就是因爲’\r’和’\t’被當成不在我們的文件名中的特殊字符。這個在讀取文件路徑很有用。

>>> f = open("D:\windows\temp\readme.txt",'r')
 
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    f = open("D:\windows\temp\readme.txt",'r')
IOError: [Errno 22] invalid mode ('r') or filename: 'D:\\windows\temp\readme.txt'

4.字符串連接

+直接連接字符串,當字符比較多的時候,效率是比較低的。

a = ['a','b','c','d']
content = ''
for i in a:
   content = content + i 
print (content)

說下爲什麼效率會低呢?
原因:在循環連接字符串的時候,他每次連接一次,就要重新開闢空間,然後把字符串連接起來,再放入新的空間,再一次循環,又要開闢新的空間,把字符串連接起來放入新的空間,如此反覆,內存操作比較頻繁,每次都要計算內存空間,然後開闢內存空間,再釋放內存空間,效率非常低,你也許操作比較少的數據的時候看不出來,感覺影響不大,但是你碰到操作數據量比較多的時候,這個方法就要退休了。

  • 方法1: 用字符串的join方法
a = ['a','b','c','d']
content = ''
content = ''.join(a)
print (content)
  • 用字符串的替換佔位符替換
    這裏不詳細介紹,有興趣可以看字符串拼接的相關知識。

5.字符串替換

字符串替換可以用內置的方法和正則表達式完成。
1)用字符串本身的replace方法:
2)用正則表達式來完成替換:

a = 'hello word'
#我把a字符串裏的word替換爲python
#用字符串本身的replace方法
a.replace('word','python')
#用正則表達式來完成替換:
import re 用正則表達式
strinfo = re.compile('word')
b = strinfo.sub('python',a)

6.字符串比較

cmp方法比較兩個對象,並根據結果返回一個整數。cmp(x,y)如果X< Y,返回值是負數 如果X>Y 返回的值爲正數。

7.字符串查找

python 字符串查找有4個方法,1 find,2 index方法,3 rfind方法,4 rindex方法。
1 find()方法:
2 index()方法:
python 的index方法是在字符串裏查找子串第一次出現的位置,類似字符串的find方法,不過比find方法更好的是,如果查找不到子串,會拋出異常,而不是返回-1

8.字符串分割

字符串分割,可以用split,rsplit方法,通過相應的規則來切割成生成列表對象。

9.字符串翻轉

通過步進反轉[::-1]

a ='hello'
b = a[::-1]

10.字符串編碼

通過字符串的decode和encode方法
encode([encoding,[errors]])
其中encoding可以有多種值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默認值爲"strict",意思是UnicodeError。可能的值還有’ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ 和所有的通過codecs.register_error註冊的值。

11.字符串長度

通過內置方法len()來計算字符串的長度,注意這個計算的是字符的長度。

a ='hello'
len(a)#5

字符串函數操作

1.字符串大小寫

通過下面的upper(),lower()等方法來轉換大小寫
S.upper()#S中的字母大寫
S.lower() #S中的字母小寫
S.capitalize() #首字母大寫
S.istitle() #S是否是首字母大寫的
S.isupper() #S中的字母是否便是大寫
S.islower() #S中的字母是否全是小寫

2.字符串去空格

通過strip(),lstrip(),rstrip()方法去除字符串的空格

S.strip()去掉字符串的左右空格
S.lstrip()去掉字符串的左邊空格
S.rstrip()去掉字符串的右邊空格

3.字符串常用函數總結

string = '2121ddqweq'

# 把字符串的第一個字符大寫
string.capitalize()  

#返回一個原字符串居中,並使用空格填充至長度 width 的新字符串
string.center(width)    

#返回 str 在 string 裏面出現的次數,如果 beg 或者 end 指定則返回指定範圍內 str 出現的次數  
string.count(str, beg=0, end=len(string))  

#以 encoding 指定的編碼格式解碼 string,如果出錯默認報一個 ValueError 的 異 常 ,
#除 非 errors 指 定 的 是 'ignore' 或 者'replace'   
string.decode(encoding='UTF-8', errors='strict')

#以 encoding 指定的編碼格式編碼 string,如果出錯默認報一個ValueError 的異常,
#除非 errors 指定的是'ignore'或者'replace'  
string.encode(encoding='UTF-8', errors='strict')

#檢查字符串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的範圍內是否以 obj 結束,如果是,
#返回 True,否則返回 False.    
string.endswith(obj, beg=0, end=len(string))

#把字符串 string 中的 tab 符號轉爲空格,tab 符號默認的空格數是 8。
string.expandtabs(tabsize=8)

#檢測 str 是否包含在 string 中,如果 beg 和 end 指定範圍,則檢查是否包含在指定範圍內,
#如果是返回開始的索引值,否則返回-1
string.find(str, beg=0, end=len(string))

#跟find()方法一樣,檢測 str 是否包含在 string 中,只不過如果str不在 string中會報一個異常.
string.index(str, beg=0, end=len(string))

#如果 string 至少有一個字符並且所有字符都是字母或數字則返回 True,否則返回 False
string.isalnum()

#如果 string 至少有一個字符並且所有字符都是字母則返回 True,否則返回 False
string.isalpha()

#如果 string 只包含十進制數字則返回 True 否則返回 False.
string.isdecimal()

#如果 string 只包含數字則返回 True 否則返回 False.
string.isdigit()

#如果 string 中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是小寫,
#則返回 True,否則返回 False
string.islower()

#如果 string 中只包含數字字符,則返回 True,否則返回 False
string.isnumeric()

#如果 string 中只包含空格,則返回 True,否則返回 False.
string.isspace()

#如果 string 是標題化的(見 title())則返回 True,否則返回 False
string.istitle()

#如果 string 中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是大寫,
#則返回 True,否則返回 False
string.isupper()

#以 string 作爲分隔符,將 seq(元素序列)中所有的元素合併爲一個新的字符串
string.join(seq)

#返回一個原字符串左對齊,並使用空格填充至長度 width 的新字符串
string.ljust(width)

#轉換 string 中所有大寫字符爲小寫.
string.lower()

#截掉 string 左邊的空格
string.lstrip()

#maketrans() 方法用於創建字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,第一個參數是字符串,
#表示需要轉換的字符,第二個參數也是字符串表示轉換的目標。
string.maketrans(intab, outtab])

#返回字符串 str 中最大的字母。
max(str)

#返回字符串 str 中最小的字母。
min(str)

#有點像 find()和 split()的結合體,從 str 出現的第一個位置起,把 字 符 串 string 分 成
# 一 個 3 元 素 的 元 組 (string_pre_str,str,string_post_str),如果 string 中
#不包含str 則 string_pre_str == string.
string.partition(str)

#把 string 中的 str1 替換成 str2,如果 num 指定,則替換不超過 num 次.
string.replace(str1, str2,  num=string.count(str1))

#類似於 find()函數,不過是從右邊開始查找.
string.rfind(str, beg=0,end=len(string) )

#類似於 index(),不過是從右邊開始.
string.rindex( str, beg=0,end=len(string))

#返回一個原字符串右對齊,並使用空格填充至長度 width 的新字符串
string.rjust(width)

#類似於 partition()函數,不過是從右邊開始查找.
string.rpartition(str)

#刪除 string 字符串末尾的空格.
string.rstrip()

#以 str 爲分隔符切片 string爲字符串列表,如果 num有指定值,則僅分隔 num 個子字符串
string.split(str="", num=string.count(str))

#按照行分隔,返回一個包含各行作爲元素的列表,如果 num 指定則僅切片 num 個行.
string.splitlines(num=string.count('\n'))

#檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,
#則在指定範圍內檢查.
string.startswith(obj, beg=0,end=len(string))

#在 string 上執行 lstrip()和 rstrip()
string.strip([obj])

#翻轉 string 中的大小寫
string.swapcase()

#返回"標題化"的 string,就是說所有單詞都是以大寫開始,其餘字母均爲小寫(見 istitle())
string.title()

#根據 str 給出的表(包含 256 個字符)轉換 string 的字符,要過濾掉的字符放到 del 參數中
string.translate(str, del="")

#轉換 string 中的小寫字母爲大寫
string.upper()

#返回長度爲 width 的字符串,原字符串 string 右對齊,前面填充0
string.zfill(width)

#檢查字符串是否只包含十進制字符。這種方法只存在於unicode對象。
string.isdecimal()

上面的函數參考了幾篇博主的文章,大家有興趣可以去這個幾個博客上面看一下。
Python 字符串詳解1
python 字符串詳解2

發佈了41 篇原創文章 · 獲贊 88 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章