python之Character string


1、python字符串

字符串是 Python 中最常用的數據類型。我們可以使用引號('或")來創建字符串,l

 Python不支持單字符類型,單字符也在Python也是作為一個字符串使用。

>>> var1 = 'hello python'    #定義字符串
>>> print(var1[0])     #切片截取,從0開始,不包括截取尾數
h
>>> print(var1[0:5])
hello
>>> print(var1[-6:])
python
>>> var2 = var1[0:6]+'world'   #截取字符並拼接賦值給新變量
>>> print(var2)
hello world

2、python轉義字符

\  :在行尾時,為續行符

\\  :反斜杠轉義,輸出'\'

\'  :單引號轉義

\"  :雙引號轉義

\b  :退格(backspace)

\n  :換行

\v  :縱向制表符

\t  :橫向制表符

\r  :回車

\f  :換頁

3、python字符串運算符

(+)拼接,(*)重復,([])索引,([:])切片,(in)成員判斷,(not in)非成員判斷,(r/R)元素輸出字符串

>>> var1 = 'hello'
>>> var2 = 'python'
>>> print(var1+var2)   #拼接字符串
hellopython
>>> print(var1*3)   #重復輸出字符串
hellohellohello
>>> print(var1[0])  #索引字符串
h
>>> print(var1[3:])  #索引切片
lo
>>> 'e' in var1   #判斷字符串是否在變量中
True
>>> 'p' not in var1  #判斷字符串是否不在變量中
True
>>> print("he\tllo \n")  
he    llo 
>>> print(r"he\tllo \n") #原始輸出字符串,也就是原始輸出轉義字符
he\tllo \n
>>> print('aaaa\nbbb',end='') #取消末尾默認換行符,只需要配置end=''就行了
aaaa
bbb>>>

4、格式化字符串

Python 支持格式化字符串的輸出 。盡管這樣可能會用到非常復雜的表達式,但最基本的用法是將一個值插入到一個有字符串格式符 %s 的字符串中。

在 Python 中,字符串格式化使用與 C 中 sprintf 函數一樣的語法。

python字符串格式化符號:

  %c  格式化字符及其ASCII碼
      %s  格式化字符串
      %d  格式化整數
      %u  格式化無符號整型
      %o  格式化無符號八進制數
      %x  格式化無符號十六進制數
      %X  格式化無符號十六進制數(大寫)
      %f  格式化浮點數字,可指定小數點后的精度
      %e  用科學計數法格式化浮點數
      %E  作用同%e,用科學計數法格式化浮點數
      %g  %f和%e的簡寫
      %G  %f 和 %E 的簡寫
      %p  用十六進制數格式化變量的地址

格式化操作符輔助指令:

* 定義寬度或者小數點精度
- 用做左對齊
+ 在正數前面顯示加號( + )
<sp> 在正數前面顯示空格
# 在八進制數前面顯示零('0'),在十六進制前面顯示'0x'或者'0X'(取決於用的是'x'還是'X')
0 顯示的數字前面填充'0'而不是默認的空格
% '%%'輸出一個單一的'%'
(var) 映射變量(字典參數)
m.n. m 是顯示的最小總寬度,n 是小數點后的位數(如果可用的話)
>>> print("ascii:%c"%'s')  #格式化輸出字符
ascii:s
>>> print("ascii:%c"%'1')  #格式化輸出數字
ascii:1
>>> print("str:%s"%'character string')  #格式化字符串
str:character string
>>> print("str:%d"%888)   #格式化整數
str:888
>>> print("str:%f"%888)   #格式浮點數
str:888.000000
>>> print("str:%e"%888)  #格式化科學計數浮點數
str:8.880000e+02
>>> print("str:%E"%888)  #同上
str:8.880000E+02
>>> print("str:%G"%888)  #%f和%E的簡寫
str:888

>>> print("str:%20f"%888.089)   #定義20寬度輸出
str:          888.089000
>>> print("str:%-20f"%888.089)  #用左對齊
str:888.089000          
>>> print("str:%+20f"%888.089)  #在正數前顯示加號
str:         +888.089000
>>> print("str:%+-20f"%888.089)   #左對齊顯示加號
str:+888.089000         
>>> print("str:%020f"%888.089)   #以0填充默認的空格
str:0000000000888.089000
>>> print("str:%%%20f"%888.089)  #在數字前輸入%號
str:%          888.089000
>>> print("str:%%%-20f"%888.089)  #左對齊輸出%號
str:%888.089000          
>>> print("str:%20.3f"%888.089)   #顯示最小總寬度20,小數點后位數為3位
str:             888.089

自python2.6開始,增加格式化字符串函數str.format():

用法:它通過{}和:來代替%

位置參數不受順序約束,且可以為{}空,只要format里有相對應的參數值即可,如參數值不夠就會報錯,參數索引從0開,傳入位置參數列表可用*列表

In [27]: '{}+{}={}'.format(1,2,3)   #格式化按順序應用參數值
Out[27]: '1+2=3'
In [28]: '{2}-{1}={0}'.format(1,2,3)  #指定順序應用參數值
Out[28]: '3-2=1'
In [29]: '{0}+{0}={1}'.format(2,3)  #指定參數可以重復使用
Out[29]: '2+2=3'
In [30]: '{}+{}={}'.format(2,3)   #如不指定順序,format參數不夠就會報錯
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-30-29f40e412920> in <module>()
----> 1 '{}+{}={}'.format(2,3)
IndexError: tuple index out of range

In [31]: l1 = [2,4,8]     
In [32]: '{}*{}={}'.format(*l1)   #使用列表引用參數值
Out[32]: '2*4=8'

In [33]: dct = {'name':'python','age':20}   #定義字典
In [35]: 'welcom to {name},age is {age}'.format(name='qi',age=28) #變量引用
Out[35]: 'welcom to qi,age is 28'

In [36]: 'welcom to {name},age is {age}'.format(**dct) #使用**引用字典參數必須填寫key值
Out[36]: 'welcom to python,age is 20'

填充與格式化:
In [53]: "{0: >20}".format("string")   #從0位開始已空格填充20寬度左對齊
Out[53]: '              string'

In [54]: "{0:&>20}".format("string")
Out[54]: '&&&&&&&&&&&&&&string'

In [55]: "{0:#>20}".format("string") #使用#號會有個小bug
   ....:     
Out[55]: '##############string'

In [60]: '{0:+<20}'.format("string")  #向右對齊填充+
Out[60]: 'string++++++++++++++'

In [61]: '{0:+^20}'.format("string")  #劇中對齊填充+
Out[61]: '+++++++string+++++++'

精度與進制:
>>> '{0:.3f}'.format(10/3)    #小數位進度格式化
'3.333'
>>> '{0:b}'.format(8)    #格式化二進制
'1000'
>>> '{0:o}'.format(9)  #格式化八進制
'11'
>>> '{0:x}'.format(26) #格式化十六進制
'1a'
>>> '{0:,}'.format(123456789)  #千分位格式化
'123,456,789'

使用索引:
>>> l2 = ['AA',{'bb':'cc'},('d','e')]   #列表索引引用
>>> 'outing:{0[0]}'.format(l2)  
'outing:AA'
>>> 'outing:{0[0]},{0[1]}'.format(l2)  #將列表當成一個元素,在其中索引值
"outing:AA,{'bb': 'cc'}"

5、python的字符串方法

  1 >>> s = 'i mi to'     #將字符串的第一個字符改為大寫
  2 >>> s.capitalize()
  3 'I mi to'
  4 
  5 >>> s = 'I MI TO'  #將字符串所有字符改為小寫
  6 >>> s.casefold()
  7 'i mi to'
  8 
  9 >>> s.center(15)  #將字符串劇中,並用空格將字符串填充長度,如指定長度小於實際長度則沒有效果
 10 '    I MI TO    '
 11 
 12 >>> s = 'abcabcabcabc' #返回sub在字符串里出現的次數,start,end為可選參數,決定范圍
 13 >>> s.count('a',0,12)
 14 4
 15 >>> s.encode(encoding='utf-8',errors='strict') #以encoding指定的編碼格式對字符串進行編碼
 16 b'abcabcabcabc'
 17 >>> s.endswith('abc',1,12)  #檢查字符串是否以sub結尾,是返回True,否返回False,start,end為可選參數,決定范圍
 18 True
 19 
 20 >>> s = 'a\tb\tc'
 21 >>> s.expandtabs(4)   #把字符串的tab字符(\t)轉化為空格,如不指定tabsize,默認為8個空格
 22 'a   b   c'
 23 
 24 >>> s.find('b')  #檢測字符串是否在字符串中,如在則返回索引,否則返回-1,可指定起始值。
 25 2
 26 
 27 >>> s='hello python'
 28 >>> s.index('hello')   # 類似find(),不同在於如果sub不在字符串中,返回異常
 29 0 
 30 
 31 >>> s.isalnum()    #有空格返回false
 32 False
 33 >>> s='hellopython'
 34 >>> s.isalnum()   #如果字符串至少有一個字符,並且所有字符都是字母或數字則返回True,否則False
 35 True
 36 >>> s.isalpha()  #如果字符串至少有一個字符,並且所有字符都是字母則返回True,否則False
 37 True
 38 
 39 >>> s = '123'
 40 >>> s.isdigit()  #如果字符串只包含數字則返回True,否則返回False
 41 True
 42 
 43 >>> s = '123'
 44 >>> s.isdecimal()  #如果字符串只包含十進制數字則返回True,否則返回False
 45 True
 46 >>> s= 'ox123'
 47 >>> s.isdecimal()
 48 False
 49 >>> s = '0.33'
 50 >>> s.isdecimal()
 51 False
 52 
 53 >>> s = 'abc'
 54 >>> s.islower()  #如果字符中至少包含一個能區分大小寫的字符,並且這些字符都是小寫則返回True,否則返回Flase
 55 True
 56 >>> s = 'Abc'
 57 >>> s.islower()
 58 False
 59 
 60 >>> s = 'ABC'
 61 >>> s.isupper()  #果字符中至少包含一個能區分大小寫的字符,並且這些字符都是大寫則返回True,否則返回Flase
 62 True
 63 >>> s = 'ABc'
 64 >>> s.isupper()
 65 False
 66 >>> 
 67 
 68 >>> s = '123'
 69 >>> s.isnumeric()  #如果字符串只包含數字字符,則返回True,否則返回False
 70 True
 71 >>> s = '123a'
 72 >>> s.isnumeric()
 73 False
 74 
 75 >>> 'def'.isidentifier()  #判斷字符串是否包含該語言的保留字
 76 True
 77 
 78 >>> 'aaa'.isprintable() #判斷是否可以打印
 79 True
 80 
 81 >>> ''.isspace()
 82 False
 83 >>> ' '.isspace()  #判斷字符串中至少有一個字符且所有都是空格,否則返回false
 84 True
 85 >>> ' a'.isspace()
 86 False
 87 
 88 >>> 'Abc'.istitle()  #判斷是否是標題 格式,可以理解為首字母大寫。
 89 True
 90 >>> 'aBC'.istitle()
 91 False
 92 
 93 >>> s = '123'
 94 >>> '_'.join(s)  #返回一個用指定字符串分隔的字,或者是將指定字符加入到另一個字符中。
 95 '1_2_3'
 96 >>> s.join('abc')
 97 'a123b123c'
 98 
 99 >>> s = 'ABC'
100 >>> s.lower()  #返回的是指定字符串的拷貝,並轉化成小寫
101 'abc'
102 
103 >>> s.ljust(10,'+')  #可以指定寬度,以及填充字符串,返回的是按寬度,填充字符串格式化后的左對齊的字符串。
104 'ABC+++++++'
105 
106 >>> 'aaabccc'.partition('b')  #在字符串中查找指定的字符,如找到則返回字符前部分,字符本身和后部分,如沒找到則返回字符串和兩個空字符串。
107 ('aaa', 'b', 'ccc')
108 >>> 'aaabccc'.partition('e')
109 ('aaabccc', '', '')
110 
111 >>> 'aaabccc'.rpartition('b')  #與partition一樣,但是是從右邊開始
112 ('aaa', 'b', 'ccc')
113 >>> 'aaabccc'.rpartition('c')
114 ('aaabcc', 'c', '')
115 
116 
117 >>> 'aaaaabbcc'.replace('a','A')  #用指定字符串替換指定字符串,如果不指定替換次數,則替換所有
118 'AAAAAbbcc'
119 >>> 'aaaaabbcc'.replace('a','A',2)
120 'AAaaabbcc'
121 
122 >>> 'aabbcc'.rfind('a')  #返回指定子串的最高索引,如果沒找到則返回-1,可以指定要開始替換的起始,結束位置。
123 1
124 >>> 'aabbcc'.rfind('e')
125 -1
126 >>> 'aabbcc'.rindex('a')  #與上面的rfind一樣,只是如果沒找到不是返回-1,而是觸發錯誤
127 1
128 >>> 'aabbcc'.rindex('e')
129 Traceback (most recent call last):
130   File "<stdin>", line 1, in <module>
131 ValueError: substring not found
132 
133 >>> 'aa'.rjust(10,'+')  #與ljust()相對應,右對齊
134 '++++++++aa'
135 >>> 'aa'.ljust(10,'+')
136 'aa++++++++'
137 
138 >>> 'aabccbddbee'.split('b')  ##按指定字符串對目標字符串進行切割,可以指定切割次數
139 ['aa', 'cc', 'dd', 'ee']
140 >>> 'aabccbddbee'.split('b',2)
141 ['aa', 'cc', 'ddbee']
142 
143 >>> 'aabccbddbee'.rsplit('b',2) #與split作用相同,但是從右側開始
144 ['aabcc', 'dd', 'ee']
145 
146 >>> '  aabb  '.strip()  #移除字符串兩側的指定字符串,默認移除空格,需要注意的是可以指定多個字符
147 'aabb'
148 >>> '  aabb'.strip('b')
149 '  aa'
150 >>> '  aabb'.strip('ab')
151 '  '
152 >>> 'beaacebb'.rstrip('eb')  #與strip一樣,從右側刪除指定字符,可以為多個
153 'beaac'
154 
155 >>> 'aa\nbb\ncc\ndd'.splitlines()  #按換行符切割顯示,如沒指定keepends=True則將換行符移除。
156 ['aa', 'bb', 'cc', 'dd']
157 >>> 'aa\nbb\ncc\ndd'.splitlines(keepends=True)
158 ['aa\n', 'bb\n', 'cc\n', 'dd']
159 
160 >>> 'aabbc'.startswith('a') #判斷字符串是否以某個字符開頭,可以是多字符
161 True
162 >>> 'aabbc'.startswith('b')
163 False
164 >>> 'aabbc'.startswith('aab')
165 True
166 
167 >>> 'aaBBcc'.swapcase()  #轉換大小寫
168 'AAbbCC'
169 
170 >>> 'wend is ok'.title()   #標題格式,首字母大寫,其它字符小寫
171 'Wend Is Ok'
172 
173 >>> 'wend is ok'.upper()  #將字符全部轉換成大寫
174 'WEND IS OK'
175 
176 >>> 'wend is ok'.zfill(20)  #這里的z指zero,用0將字符填充到指定長度
177 '0000000000wend is ok'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM