python7:字串,python7字串
在Python中,字串對應對象str,字串是使用Unicode編碼的不可變序列。
構造字串
字串可以使用下面幾種文法:
1)單引號:'allows embedded "double" quotes'
2)雙引號:"allows embedded 'single' quotes"
3)三引號:'''Three single quotes''', """Three double quotes"""
三引號的字串可以在多行擴充——所有空格都將被包含在字串中,例如:
>>> '''threesingleqiptes''''three\nsingle\nqiptes'
對於單個運算式的一部分並且之間只有空格的字串將被隱式地轉換為單個字串,例如:
>>> "spam " "eggs"'spam eggs'
字串也可以使用str構造器來構造:
class str(object='')
class str(object=b'', encoding='utf-8', errors='strict')
str()返回一個字串對象。如果object不提供,則預設返回Null 字元串,否則,str()的行為依賴於encoding或者errors是否提供:
1)encoding和errors都不提供,str(object)返回object.__str__(),用於表示object的字串描述;對於字串,就是它本身。如果對象沒有__str__()方法,則返回repr(object);
2)encoding和errors其中一個被提供,object應該是一個bytes-like object(例如:bytes或者bytearray)。假如object是一個bytes(或者bytearray),那麼str(bytes, encoding, errors)等價於bytes.decode(encoding, errors),否則,在調用bytes.decode()之前object下的位元組對象將被擷取。
注意未指定encoding或者errors的情況下對bytes對象使用str()相當於返回對象的描述資訊,同1,如:
>>> str(b'test!')"b'test!'"
下面看一個例子:
class StrTest(): def __str__(self): return "this is StrTest" print(str(StrTest()))
列印結果為:this is StrTest
字串方法
字串實現了所有序列的公用方法,並增加了許多額外的方法。
str.capitalize()
返回字串的一個拷貝,第一個字元大寫,其它字元小寫。
str.casefold()
返回一個字串的casefolded拷貝,casefolded字串可以被用於caseless匹配。
Casefolding類似於小寫,但是更進一步,因為它移除在字串中的所有差異。例如,德語的小寫字母對應於"ss",由於它已經是小寫,所以lower()將不做任何事,但casefold()會將它轉換為"ss"。
str.center(width[, fillchar])
返回長度為width的字串,若width大於len(s),則用fillchar(預設空格)填充,並將s放在中心位置,如:
>>> s = 'test'>>> s.center(10,'*')'***test***'
str.count(sub[, start[, end]])
返回sub在str中出現的次數,選擇性參數start和end用於限制返回。
str.encode(encoding="utf-8", errors="strict")
返回一個使用encoding編碼的bytes對象。
str.endswith(suffix[, start[, end]])
如果字串以suffix結尾,則返回true,suffix可以是一個元組,只要其中一個元素匹配則返回true,例如:
>>> s = 'test'*4>>> s.endswith('test')True>>> s.endswith(('test1','test2','test'))True
str.expandtabs(tabsize=8)
返回一個str的拷貝,其中所有的tab字元被一個或者多個空格代替,依靠指定的tabsize,預設8。
>>> '01\t012\t0123\t01234'.expandtabs()'01 012 0123 01234'>>> '01\t012\t0123\t01234'.expandtabs(4)'01 012 0123 01234'
str.find(sub[, start[, end]])
返回sub在str中被發現的最小索引,如果未發現則返回-1。
注意find應該只用於查詢sub的位置,如果判斷sub是否在字串中,用in操作即可:
>>> 'Py' in 'Python'True
str.format(*args, **kwargs)
執行字串的格式化操作。使用該方法的字串能夠使用括弧{}包含的替換域,每個替換域或者使用位置編號,或者使用變數名,返回字串的拷貝,並且所有替換域都被替換。
>>> "The sum of 1 + 2 is {0}".format(1+2)'The sum of 1 + 2 is 3'
str.format_map(mapping)
在3.2版本中添加,看下面的例子:
>>> class Default(dict):def __missing__(self, key):return key>>> '{name} was born in {country}'.format_map(Default(name='Guido'))'Guido was born in country'
str.index(sub[, start[, end]])
同find(),除了當子串未發現時拋出ValueError異常。
str.isalnum()
如果字串中的所有字元都是字母數字,則返回true,只要一個字元非字母數字,則返回false。字元c是字母數字,表示以下方法的其中之一返回true:c.isalpha(),c.isdecimal(),c.isdigit()或者 c.isnumeric()。
str.isalpha()
如果字串中的所有字元都是字母,則返回true。
str.isdecimal()
如果字串中的所有字元都是十進位數字,則返回true。
str.isdigit()
如果字串中的所有字元都是數字,則返回true。
str.isidentifier()
字串是否是有效標識符。
str.islower()
字串中的所有字元都是小寫,則返回true。
str.isnumeric()
如果字串中所有的字元都是數字字元,則返回true。
str.isprintable()
如果字串為空白,或者字串中的數字都是可列印的,則返回true。不可列印的字元包括unicode字元集中標註為"Other"和"Separator"的。
str.isspace()
如果字串中全是空格,則返回true。
str.istitle()
如果字串是title,則返回true,即首字母大寫。
str.isupper()
如果字串中字元全是大寫,則返回true。
str.join(iterable)
返回iterable中元素聯合的字串,iterable中元素使用str分隔。如果iterable存在非str的元素,則拋出TypeError異常。
>>> s = 'Asss'>>> s.join(['1','2','3','4'])'1Asss2Asss3Asss4'
str.ljust(width[, fillchar])
返回一個做適配長度width的字串,空白使用fillchar填充,如果字串長度大於等於width,原始字串被返回。
>>> s = '12345678'>>> s.ljust(6)'12345678'>>> s.ljust(15)'12345678 '>>> s.ljust(15,'%')'12345678%%%%%%%'
str.lower()
返回一個所有字元小寫str的拷貝。
str.lstrip([chars])
返回移除指定起始字元的str的拷貝,如果chars不指定,則預設移除空格。
>>> s = ' spaciout '>>> s.lstrip()'spaciout '>>> s.lstrip('s')' spaciout '>>> s.lstrip(' s')'paciout '>>> s.lstrip(' sp')'aciout '>>> s.lstrip(' p')'spaciout '
static str.maketrans(x[, y[, z]])
靜態方法,用於為str.translate()產生一個轉換表。
如果只有一個參數,則參數必須為字典;如果兩個參數,則必須是等長的字串;如果為3個參數,則第三個參數必須為字串,並且該字串的字元將被匹配為None。
>>> str.maketrans({'a':'A','b':'B'}){97: 'A', 98: 'B'}>>> str.maketrans('abc','ABC'){97: 65, 98: 66, 99: 67}>>> str.maketrans('abc','ABC','def'){97: 65, 98: 66, 99: 67, 100: None, 101: None, 102: None}更詳細的使用看translate方法。
str.partition(sep)
從第一個出現的sep部分分離字串,得到一個3個元素的元組:sep之前的部分、sep、sep之後的部分。如果sep未找到,任然返回一個3個元素的元組:str、Null 字元串、Null 字元串。
>>> s = '123456789'>>> s.partition('45')('123', '45', '6789')>>> s.partition('666')('123456789', '', '')
str.replace(old, new[, count])
返回一個新的字串,其中所有old都被new代替,count用於指定只替換前count個。
str.rfind(sub[, start[, end]])
返回sub在str中最後出現的索引號,返回-1表示未找到。
str.rindex(sub[, start[, end]])
同rfind,但如果sub未找到,則拋出ValueError。
str.rjust(width[, fillchar])
看ljust,rjust表示右適配。
str.rpartition(sep)
看partition,rpartition表示從右尋找sep。
str.rsplit(sep=None, maxsplit=-1)
使用sep分隔str,maxsplit表示最大的劃分數,sep不指定或為none,則使用空格分隔str。
>>> s = '12345' * 8>>> s.rsplit('45')['123', '123', '123', '123', '123', '123', '123', '123', '']>>> s.rsplit('45',6)['1234512345123', '123', '123', '123', '123', '123', '']
str.rstrip([chars])
返回str的拷貝,末尾的字元被移除,預設移除空格,chars表示移除的字元集。
>>> ' spacious '.rstrip()' spacious'>>> 'mississippi'.rstrip('ipz')'mississ'
str.split(sep=None, maxsplit=-1)
看rsplit,返回一個使用sep分隔的列表,sep未指定則使用空格分隔。maxsplit表示最大分隔次數。
str.splitlines([keepends])
使用那個行結束符分隔str,返回一個行列表。keepends預設為false,表示行分隔字元不包含在結果清單中。
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()['ab c', '', 'de fg', 'kl']>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)['ab c\n', '\n', 'de fg\r', 'kl\r\n']
注意和split的區別:
1)對於Null 字元串,splitlines返回空列表,split返回包含一個Null 字元串的列表。
>>> "One line\n".splitlines()['One line']>>> 'Two lines\n'.split('\n')['Two lines', '']2)對於行結束符結束的字串,splitlines返回單個元素的列表,split返回兩個元素的列表。
>>> "".splitlines()[]>>> ''.split('\n')['']
str.startswith(prefix[, start[, end]])
字串如果以prefix開頭,則返回true;prefix可以是一個元組。
>>> s = 'Hello!world.'>>> s.startswith('Hello')True>>> s.startswith(('Hello','hello'))True
str.strip([chars])
返回str的拷貝,並移除首尾字元(預設空白)。
>>> ' spacious '.strip()'spacious'>>> 'www.example.com'.strip('cmowz.')'example'
str.swapcase()
返回str的拷貝,並轉換大小寫,注意s.swapcase().swapcase() == s。
>>> s = 'aBcDe'>>> s.swapcase()'AbCdE'
str.title()
返回str的拷貝,每個單詞的首字母大寫,其餘字母小寫。
>>> 'Hello woRld'.title()'Hello World'>>> "they're bill's friends from the UK".title()"They'Re Bill'S Friends From The Uk"
str.translate(map)
對應看maketrans。返回str的拷貝,其中所有的字元都使用map做了映射。
>>> 'abcdefg-1234567'.translate(str.maketrans('abc', 'ABC'))'ABCdefg-1234567'>>> 'abcdefg-1234567'.translate(str.maketrans('abc', 'ABC', '456'))'ABCdefg-1237'
str.upper()
返回str的拷貝,其中的字元都被轉換到大寫。注意如果str中包含了無大小寫形式(uncased)的字元,str.upper().isupper()會得到false。
str.zfill(width)
返回一個str的拷貝,長度為width,左邊用0填充,如果str以'+'/'-'開頭,則從'+'/'-'之後開始填充。
>>> "42".zfill(5)'00042'>>> "-42".zfill(5)'-0042'
字串的格式化列印
字串支援%操作,用於格式化字串,類似於C語言中的sprintf()。
當格式化僅要求一個參數時,值可以為單個的字串,否則,值必須是和參數長度相等的元組或者映射對象。
基本的轉換說明符包括以下部分:
1)%字元:標記轉換說明符位置;
2)轉換標誌(可選):-表示靠左對齊;+表示在轉換值之前要加上加號或減號;" "(空白字元)表示整數之前保留空格;0表示轉換值若位元不夠則填充0;
3)最小字元寬度(可選):轉換後的最小字元寬度;
4)點(.)後跟精度值(可選):如果是實數,則表示出現在小數點後的位元;如果為字串,表示最大欄位寬度;
5)轉換類型:
d,i:帶符號的十進位數
0:不帶符號的八進位
u:不帶符號的十進位
x:不帶符號的十六進位(大、小寫均可)
e:科學計數法表示的浮點數(大、小寫均可)
f:十進位浮點數(大、小寫均可)
g:如果指數大於-4或者小於進度值則同e,否則同f(大、小寫均可)
C:單字元(接受整數或者單字元字串)
r:字串(使用repr轉換任意Python對象)
s:字串(使用str轉換任意Python對象)
看下面的例子。
直接轉換
>>> "I'm %s. I'm %d year old" % ('Tomato', 30)"I'm Tomato. I'm 30 year old">>> from math import pi>>> 'Pi: %f...' % pi'Pi: 3.141593...'
指定寬度和精度
>>> 'Pi: %10f' % pi'Pi: 3.141593'>>> 'Pi: %10.2f' % pi'Pi: 3.14'>>> '%.5s' % 'this is a test''this '
可以使用*作為字元寬度或者精度,這時數值從元組參數中讀出:
>>> '%.*s' % (8,'this is a test')'this is '
符號、對齊和0填充
使用'-'表示靠左對齊:
>>> '%10.2f' % pi' 3.14'>>> '%-10.2f' % pi'3.14 '
使用0表示數字將會用0進行填充:
>>> '%010.2f' % pi'0000003.14'
" "表示在整數前加上空格,負數不變,用於對齊正負數:
>>> print(('% 5d' % 10) + '\n' + ('% 5d' % -10)) 10 -10+表示不管整數還是負數,都表示出符號:
>>> print(('%+5d' % 10) + '\n' + ('%+5d' % -10)) +10 -10