乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python數(shù)據(jù)類(lèi)型之“文本序列(Text Sequence)”

       candidacy 2019-07-15

      Python中的文本序列類(lèi)型


      Python中的文本數(shù)據(jù)由str對(duì)象或字符串進(jìn)行處理。

      1.字符串

      字符串是Unicode碼值的不可變序列。字符串字面量有多種形式:

      • 單引號(hào):'允許嵌入"雙"引號(hào)'
      • 雙引號(hào):"允許嵌入'單'引號(hào)"
      • 三引號(hào):'''三個(gè)單引號(hào)''', """三個(gè)雙引號(hào)"""

      說(shuō)明:

      a) 三引號(hào)的字符串可以跨越多行,所關(guān)聯(lián)的空格將包含在字符串文字中;

      b) 字符串也可以使用str構(gòu)建函數(shù)從其他對(duì)象創(chuàng)建;

      c) 因?yàn)闆](méi)有單獨(dú)的“字符”類(lèi)型,因此索引字符串將產(chǎn)生長(zhǎng)度為1的字符串。也就是說(shuō),對(duì)于非空字符串s,s[0] == s[0:1];

      d) 沒(méi)有可變的字符串類(lèi)型,但是str.join()或io.StringIO可以用于從多個(gè)片斷有效地構(gòu)造字符串;

      e) 字符串中可以是用反斜線(xiàn)"\"對(duì)特殊字符進(jìn)行轉(zhuǎn)義,也可以在字符串字面上使用"r"前綴來(lái)取消轉(zhuǎn)義;

      f) Python 3.3中的修改:為了向后兼容Python 2系列,在字符串字面上再次允許使用"u"前綴,但是它對(duì)字符串文字的含義沒(méi)有影響,也不能與"r"前綴組合使用;

      g) 作為單個(gè)表達(dá)式的一部分并且在它們之間只有空格的字符串文字將被隱式轉(zhuǎn)換為單個(gè)字符串文字。也就是說(shuō)("spam""eggs") == "spam eggs";

      2.str類(lèi)

      str類(lèi)構(gòu)建方法

      class str(object='')
      class str(object=b'', encoding='utf-8', errors='strict')

      str類(lèi)的構(gòu)建方法返回對(duì)象的字符串版本。如果未提供對(duì)象參數(shù),則返回空字符串。否則,str()的行為取決于是否給出了encoding和errors參數(shù),如下所示:

      • 如果既沒(méi)有給出encoding也沒(méi)有給出errors參數(shù),str(object)將會(huì)返回object.__str__()的值,這是object的“非正式”或可打印的字符串表示。對(duì)于字符串對(duì)象,這是字符串本身。如果該object沒(méi)有__str__()方法,那么str()將會(huì)返回repr(object)的結(jié)果值。
      • 如果給出了encoding或errors兩個(gè)參數(shù)中的至少一個(gè),則object應(yīng)該是類(lèi)似于字節(jié)的對(duì)象(例如bytes或bytearray)。在這種情況下,如果object是bytes(或 bytearray)對(duì)象,則str(bytes,encoding,errors)等價(jià)于bytes.decode(encoding, errors)。
      • 將字節(jié)對(duì)象傳遞給str()而不使用encoding或errors參數(shù)屬于返回非正式字符串表示形式的第一種情況。

      str構(gòu)建示例

      >>> 'Hello, World!'  # 單引號(hào)
      'Hello, World!'
      >>> "Hello, World!"  # 雙引號(hào)
      'Hello, World!'
      >>> """  # 三引號(hào),多行
      ... Hello,
      ... World!
      ... """
      '\nHello,\nWorld!\n'
      >>> "Hello, \"World!\""  # 使用轉(zhuǎn)義
      'Hello, "World!"'
      >>> str()  # 不給出object參數(shù),返回空字符串
      ''
      >>> str("Hello, World!")  # 給出object參數(shù),但不給出encoding和errors
      'Hello, World!'
      >>> str(b"Hello, World!")  
      "b'Hello, World!'"
      >>> str(b"Hello, World!", encoding='utf-8')  # 給出object參數(shù),也給出encoding參數(shù)
      'Hello, World!'

      3.文本序列支持的操作

      由于文本序列是一個(gè)特殊的(專(zhuān)門(mén)處理文本)不可變序列,因此它不支持可變序列特有的操作,但是它支持所有的序列通用操作。下面介紹下str支持的除序列通用操作外的其他方法:

       
      # 返回一個(gè)將字符串居中的指定長(zhǎng)度的字符串,填充部分使用fillchar指定的字符來(lái)完成(默認(rèn)為ASCII空格)。如果width小于或等于len(s),則返回原始字符串
      str.center(width[,fillchar])
      # 與center()方法類(lèi)似,只是字符串位于左邊, 填充字符位于右邊
      str.ljust(width[,fillchar])
      # 與center()方法類(lèi)似,只是字符串位于右邊,填充字符位于左邊
      str.rjust(width[,fillchar])
      # 在數(shù)字字符串左側(cè)以ASCII的'0'數(shù)字進(jìn)行填充,形成一個(gè)長(zhǎng)度為width的字符串副本,并返回。如果數(shù)字字符串中包含前綴符號(hào)(如 '+'/'-')則'0'會(huì)被插入到前綴字符與數(shù)字字符之間。如果width<=len(s),則返回原始字符串。
      str.zfill(width)
      
      # 返回字符串刪除指定的前導(dǎo)字符和尾隨字符之后的副本??蛇x參數(shù)chars是一個(gè)字符串,用來(lái)指定要?jiǎng)h除的字符集合,如果省略或?yàn)镹one則chars參數(shù)默認(rèn)為刪除空格。注意:chars參數(shù)不是前綴或后綴字,相反,它包含的字符的所有組合都會(huì)被刪除。
      str.strip([chars])
      # 與strip()方法類(lèi)似,只是僅刪除字符串的前導(dǎo)字符
      str.lstrip([chars])
      # 與strop()方法類(lèi)似,只是僅刪除字符串的尾隨字符
      str.rstrip([chars])
      
      # 返回子串sub在切片s[start:end]中第一次出現(xiàn)的索引位置,如果子串sub不存在則返回-1。需要注意的是,只有當(dāng)需要知道sub的位置時(shí),才應(yīng)該使用find()方法,如果要檢查sub是否是字符串的子串,請(qǐng)使用in運(yùn)算符。
      str.find(sub[,start[,end]])
      # 返回子串sub在切片s[start:end]中最后一次出現(xiàn)的索引位置,如果子串sub存在則返回-1。
      str.rfind(sub[, start[, end]])
      
      # 該方法類(lèi)似于find(),但是如果子串未找到會(huì)拋出ValueError異常。
      str.index(sub[, start[, end]])
      # 該方法類(lèi)似于rfind(),但是如果子串為找到會(huì)拋出ValueError異常。
      str.rindex(sub[, start[, end]])
      
      # 返回在范圍[start, end]內(nèi)指定的字符串sub不重疊出現(xiàn)的次數(shù)。
      str.count(sub[, start[, end]])
      # 將字符串的編碼版本作為字節(jié)對(duì)象返回,默認(rèn)編碼為“utf-8”。errors的默認(rèn)值為"strict",意味著編碼錯(cuò)誤會(huì)引發(fā)UnicodeError,其他可能的值為"ignore", "replace"等。
      str.encode(encoding="utf-8", errors="strict")
      
      # 以當(dāng)前字符串為連接符把iterable中的所有字符串連接成一個(gè)字符串并返回,如果iterable中存在非字符串值(包括bytes對(duì)象),將會(huì)拋出TypeError異常。
      str.join(iterable)
      # 用sep參數(shù)的值作為分隔符對(duì)字符串進(jìn)行分割,返回一個(gè)字符串列表。如果maxsplit參數(shù)被給出,那么最多進(jìn)行maxsplit次分割操作(因此,得到的字符串里列表將最多有maxsplit+1個(gè)元素);如果maxsplit沒(méi)有被指定或指定為-1,則不限制分割次數(shù)。
      str.split(sep=None, maxsplit=-1)
      # 用split()函數(shù)類(lèi)似,只是它從右向左進(jìn)行分割。
      str.rsplit(seq=None, maxsplit=-1)
      # 在字符串中的行邊界位置進(jìn)行切割,返回一個(gè)行的列表。可選參數(shù)keepends為一個(gè)布爾值,表示換行符是否包含結(jié)果列表中,默認(rèn)為false。這里的行邊界包括'\n', '\r', '\r\n'等。|
      str.splitlines([keepends])
      
      # 該靜態(tài)方法將返回一個(gè)可用于str.translate(table)方法的轉(zhuǎn)換表(字典)。如果只有一個(gè)參數(shù),它必須是一個(gè)將Unicode ordinals(整數(shù))或字符(長(zhǎng)度為1的字符串) 映射為 Unicode ordinal(整數(shù)),字符串(任意長(zhǎng)度)或None的字典映射。字符鍵值將被轉(zhuǎn)換為整數(shù)。如果有兩個(gè)參數(shù),它們必須是相同長(zhǎng)度的字符串,并且在結(jié)果字典中,x中的每個(gè)字符將被映射到y(tǒng)中相同位置的字符。如果有第三個(gè)參數(shù),它必須是一個(gè)字符串,其字符將在結(jié)果字典中被映射為None。
      static str.maketrans(x[, y[, z]])
      # 返回一個(gè)字符串副本,通過(guò)給定的轉(zhuǎn)換表table將字符串副本中的每個(gè)字符轉(zhuǎn)換為對(duì)應(yīng)的值(字符/字符串/None)。table參數(shù)必須是通過(guò)__getitem__()實(shí)現(xiàn)索引的對(duì)象,通常是映射或序列。當(dāng)使用Unicode序號(hào)(整數(shù))索引時(shí),table對(duì)象可以執(zhí)行以下任何操作:返回Unicode序號(hào)或字符串,可以將字符映射到一個(gè)或多個(gè)其它字符;返回None,可以從返回字符串中刪除字符;將字符映射到自身,將引發(fā)LookupError異常。
      str.translate(table)  
      
      # 返回一個(gè)將字符串中的所有小寫(xiě)字母轉(zhuǎn)為大寫(xiě)的字符串拷貝。
      str.upper()
      # 返回一個(gè)將字符串中的所有大寫(xiě)字母轉(zhuǎn)為小寫(xiě)的字符串拷貝。
      str.lower()
      # 返回一個(gè)將字符串中的所有大寫(xiě)字母轉(zhuǎn)為小寫(xiě),將所有的小寫(xiě)字母轉(zhuǎn)為大寫(xiě)的字符串拷貝。
      str.swapcase()
      # 返回一個(gè)將第一個(gè)字母轉(zhuǎn)為大寫(xiě)的字符串拷貝。
      str.capitalize()
      # 返回一個(gè)將所有單詞首字母轉(zhuǎn)為大寫(xiě)的字符串拷貝。
      str.title()
      
      # 如果字符串以指定的前綴prefix開(kāi)始,則返回True,否則返回False。后綴也可以是一個(gè)后綴元祖??蛇x參數(shù)start和end可以指定查找前綴的開(kāi)始和結(jié)束位置。
      str.startswith(prefix[, start[, end]])
      # 如果字符串以指定的后綴suffix結(jié)尾,則返回True,否則返回False。后綴也可以是一個(gè)后綴元祖??蛇x參數(shù)start和end可以指定查找后綴的開(kāi)始和結(jié)束位置。
      str.endswith(suffix[, start[, end]])
      
      # 如果字符串中至少有一個(gè)字符,且所有字符都是十進(jìn)制字符則返回True,否則返回False。此類(lèi)別包括十進(jìn)制數(shù)字和所有可用于形成十進(jìn)制數(shù)字的字符,如 U+0660, ARABIC-INDIC DIGIT ZERO。
      str.isdecimal()
      # 如果字符串中至少有一個(gè)字符,且所有字符都是數(shù)字則返回True, 否則返回False。數(shù)字包括十進(jìn)制字符和需要特殊處理的數(shù)字,形式上,數(shù)字是具有屬性值Numeric_Type = Digit 或 Numeric_Type = Decimal的字符。
      str.isdigit()
      # 如果字符串中至少有一個(gè)字符,且所有字符都是數(shù)字字符則返回Ture, 否則返回False。這里的數(shù)字字符包括digit字符和所有具有Unicode數(shù)字值屬性的所有字符。形式上,這里的數(shù)字字符是指具有屬性值Numeric_Type = Digit, Numeric_Type = Decimal 或 Numeric_Type = Numeric的字符。
      str.isnumeric()
      # 如果字符串中至少有一個(gè)字符,且所有字符都是字母則返回True,否則返回False。
      str.isalpha()
      # 如果字符串中至少有一個(gè)字符,且所有字符都是numeric或alpha則返回Ture, 否則返回False。即只要上面4個(gè)方法中的任意一個(gè)方法調(diào)用返回Ture則該方法調(diào)用就返回Ture。
      str.isalnum()
      # 如果字符串中至少有一個(gè)字符,且所有字符都是空白字符則返回True, 否則返回False。
      str.isspace()

      文本序列操作示例

      >>> 'welcome'.center(15, '-')
      '----welcome----'
      >>> 'welcome'.ljust(15, '-')
      'welcome--------'
      >>> 'welcome'.rjust(15, '-')
      '--------welcome'
      >>> '11'.zfill(15)
      '000000000000011'
      >>>
      >>> '    spacious    '.strip()
      'spacious'
      >>> 'www.example.com'.strip('cmowz')
      '.example.'
      >>> '    spacious    '.lstrip()
      'spacious    '
      >>> 'www.example.com'.lstrip('cmowz')
      '.example.com'
      >>> '    spacious    '.rstrip()
      '    spacious'
      >>> 'mississippi'.rstrip('ipz')
      'mississ'
      >>>
      >>> 'Hello, Lilly'.find('ll')
      2
      >>> 'Hello, Lilly'.find('ll', 4)
      9
      >>> 'Hello, Lilly'.rfind('ll')
      9
      >>> 'Hello, Lilly'.rfind('ll', 0, 7)
      2
      >>> 'Hello, Lilly'.index('ll')
      2
      >>> 'Hello, Lilly'.index('ll', 4)
      9
      >>> 'Hello, Lilly'.rindex('ll')
      9
      >>> 'Hello, Lilly'.rindex('ll', 0, 7)
      2
      >>> 'Hello, Lilly'.find('lll')
      -1
      >>> 'Hello, Lilly'.index('lll')
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      ValueError: substring not found
      >>>
      >>> ':'.join(['Tom', 'Jerry', 'Peter'])
      'Tom:Jerry:Peter'
      >>> 'Tom:Jerry:Peter'.split()
      ['Tom:Jerry:Peter']
      >>> 'Tom:Jerry:Peter'.split(sep=':')
      ['Tom', 'Jerry', 'Peter']
      >>> 'Tom:Jerry:Peter'.split(sep=':', maxsplit=1)
      ['Tom', 'Jerry:Peter']
      >>> 'Tom:Jerry:Peter'.rsplit(sep=':')
      ['Tom', 'Jerry', 'Peter']
      >>> 'Tom:Jerry:Peter'.rsplit(sep=':', maxsplit=1)
      ['Tom:Jerry', 'Peter']
      >>> 'Tom:Jerry::Peter:'.split(sep=':')  # 空值不會(huì)被合并,可能需要單獨(dú)進(jìn)行空值判斷
      ['Tom', 'Jerry', '', 'Peter', '']
      >>> 'ab c\n\nde fg\rkl\r\n'.splitlines()  # 末尾的行尾標(biāo)記不會(huì)產(chǎn)生一個(gè)額外的行
      ['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']
      >>>
      >>> 'abcdedfg'.translate({'a':'A', 'd': 'D'})  # 轉(zhuǎn)換表中的key應(yīng)該是字符對(duì)應(yīng)的Unicode數(shù)字值,而不應(yīng)該是字符本身
      'abcdedfg'
      >>> 'abcdedfg'.translate({97: 'A', 100: 'D'})
      'AbcDeDfg'
      >>> str.maketrans({'a': 'A', 'd': 'D'})
      {97: 'A', 100: 'D'}
      >>> table = str.maketrans({'a': 'A', 'd': 'D'})  # 這樣就不要是查字符對(duì)應(yīng)的Unicode數(shù)字值是多少了
      >>> 'abcdedfg'.translate(table)
      'AbcDeDfg'
      >>>
      >>> 'hello, world!'.upper()
      'HELLO, WORLD!'
      >>> 'hello, world!'.upper().lower()
      'hello, world!'
      >>> 'Hello, World!'.swapcase()
      'hELLO, wORLD!'
      >>> 'hello, world!'.capitalize()
      'Hello, world!'
      >>> 'hello, world!'.title()
      'Hello, World!'

      4.字符串的格式化

      在幾乎所有的編程語(yǔ)言中,字符串的格式化都是非常重要的基本知識(shí)。Python中實(shí)現(xiàn)字符串格式化有以下幾種方式:

      • 字符串拼接(不推薦使用)
      • 符串本身所支持的方法調(diào)用:str.format(*args, **kwargs)
      • 字符串的內(nèi)置操作符:%

      通過(guò)字符串拼接實(shí)現(xiàn)式化

      >>> a = 2
      >>> b = 3
      >>> str(a) + ' + ' + str(b) + ' = ' + str(a+b)
      '2 + 3 = 5'

      此處通過(guò)字符串的拼接來(lái)輸出一定格式的字符串,這會(huì)在內(nèi)存中產(chǎn)生多個(gè)字符串對(duì)象,且操作復(fù)雜,容易出錯(cuò)。

      使用str.fromat()進(jìn)行字符串格式化

      該方法用于執(zhí)行字符串格式化操作。調(diào)用此方法的字符串可以包含由大括號(hào)字面文本或由大括號(hào){}分割的替換字段。每個(gè)替換字段保存位置參數(shù)的數(shù)字索引或關(guān)鍵字參數(shù)的名稱(chēng)。該方法將返回一個(gè)字符串副本,其中每個(gè)替換字段都替換為相應(yīng)參數(shù)的字符串值。

      >>> a = 2
      >>> b = 3
      >>> '{0} + {1} = {2}'.format(a, b, a+b)  # 使用位置參數(shù)
      '2 + 3 = 5'
      >>> '{a} +  = {c}'.format(a=a, b=b, c=a+b)  # 使用關(guān)鍵字參數(shù)
      '2 + 3 = 5'
      >>> '{a} +  = {c}'.format({'a': a, 'b': b, 'c': a+b})  # 不能使用字典
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      KeyError: 'a'

      str.format()可以實(shí)現(xiàn)簡(jiǎn)單的字符串格式化,但是這種格式化方式存在一些怪癖,比如它不支持接收元組(tuple)、字典(dict)等數(shù)據(jù)類(lèi)型作為參數(shù),這是非常不方便的。

      使用字符串內(nèi)置操作符(%)進(jìn)行字符串格式化

      %操作符是字符串對(duì)象唯一的內(nèi)置操作,也稱(chēng)為字符串格式化或插值運(yùn)算符。該接口提供了一種更強(qiáng)大、靈活和可擴(kuò)展的方法來(lái)格式化文本。格式字符串中的% 轉(zhuǎn)換規(guī)范將會(huì)被替換為0個(gè)或多個(gè)元素的值,效果類(lèi)似于在C語(yǔ)言中使用sprintf()。

      如果格式字符串需要單個(gè)參數(shù),那么替換值可以是單個(gè)非元組對(duì)象;否則,替換值必須是具有由格式化字符串指定的條目數(shù)量的元組,或者是單個(gè)映射對(duì)象(例如,字典)。

      >>> 'The sum of 2 + 3 is: %d' % 5  # 格式化字符串只需要1個(gè)參數(shù),替換值可以是的那個(gè)非元組字符
      'The sum of 2 + 3 is: 5'
      >>>
      >>> a = 2
      >>> b = 3
      >>> '%d + %d = %d' % (a, b, a+b)  # 格式化字符串需要n(n > 1)個(gè)參數(shù),替換值需要是具有n個(gè)元素的元組
      '2 + 3 = 5'
      >>> '%(a)d + %(b)d = %(c)d' % {'a': a, 'b': b, 'c': a+b}  # 格式化字符串需要n(n > 1)個(gè)參數(shù),替換也可以是具有n個(gè)元素的映射對(duì)象
      '2 + 3 = 5'
      >>>

      上面示例中,格式字符串中的 %d, %(a)d稱(chēng)為“轉(zhuǎn)換說(shuō)明標(biāo)識(shí)符”。這個(gè)標(biāo)識(shí)符可以由2個(gè)或多個(gè)部分組成,且各部分必須按照指定的順序排列:

      • '%'字符:表示“轉(zhuǎn)換說(shuō)明標(biāo)識(shí)符”的開(kāi)始;
      • 映射鍵名稱(chēng)(Mapping key): 可選部分,由小括號(hào)包含的字符串序列組成,如:(name);
      • 轉(zhuǎn)換標(biāo)識(shí)(Conversion flags):可選部分,這個(gè)會(huì)影響一些轉(zhuǎn)換類(lèi)型的結(jié)果;如:'0'表示用數(shù)字字符0進(jìn)行填充,'-'表示左對(duì)齊(用空白字符進(jìn)行右填充)
      • 最小字段寬度(Minimum field width): 可選部分,指定轉(zhuǎn)換結(jié)果的最小寬度
      • 精度(Precision): 可選部分,通過(guò)".精度值"的方式來(lái)指定小數(shù)點(diǎn)后保留幾位小數(shù)
      • 長(zhǎng)度修飾符(Length modifier): 可選部分
      • 轉(zhuǎn)換類(lèi)型(Conversion type): 用于指定數(shù)據(jù)類(lèi)型;常用的轉(zhuǎn)換類(lèi)型有 'd'或'i'表示有符號(hào)十進(jìn)制整數(shù),'f'或'F'表示浮點(diǎn)數(shù),'s'表示字符串, '%'表示其本身

      由上可見(jiàn),在“轉(zhuǎn)換說(shuō)明表示符”的7個(gè)組成部分中,只有第1部分"%",和最后一部分"轉(zhuǎn)換類(lèi)型"是必須的指定的,其他部分都是可選的輔助項(xiàng)。另外,長(zhǎng)度修飾符(h,l或L)可以存在,但是將被忽略,因?yàn)閷?duì)于Python不是必要的。也就是說(shuō),ld與%d是相同的。

      >>> student01 = {'name': 'Peter', 'sno': 15, 'age': 22, 'score': 93.92532}
      >>> msg = '''
      ... ##### Information of student: %(name)s #####
      ... 姓名:%(name)s
      ... 學(xué)號(hào):%(sno)010d
      ... 年齡:%(age)d
      ... 得分:%(score).2f
      ... ----- end -----
      ... ''' % student01
      >>> print(msg)
      
      ##### Information of student: Peter #####
      姓名:Peter
      學(xué)號(hào):0000000015
      年齡:22
      得分:93.93
      ----- end -----
      
      >>>

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶(hù) 評(píng)論公約

        類(lèi)似文章 更多