Python 字串 str

Jason990420發表於2020-03-02

Python 字串 str

類定義

  1. 物件轉字串
    • str(object=’’) 返回object.__str__()或repr(object)
  2. 位元組轉字串
    • str(bytes_or_buffer, encoding=sys.getdefaultencoding() , errors=’strict’)
      • encoding 編碼轉換
        • sys.getdefaultencoding() := ‘utf-8’
      • errors 錯誤處理
        • ‘strict’ - UnicodeEncodeError Exception
        • ‘ignore’ - 忽略錯誤, 跳過不處理
        • ‘replace’ - 有錯誤以’�’取代 (‘\ufff’)
        • ‘xmlcharrefreplace’ - 以XML方式來表示, 比如’灣’
        • ‘backslashreplace’ - ‘\\NNNN’取代
        • ‘namereplace’ - ‘\\N{…}’取代

類的方法 (部份建構成 Python 本身字串的語法)

  1. 字串本身

    • 常數表示法

    • 單引號 ‘…’

    • 雙引號 “…”

    • 三重引號 ‘’’…’’’ 或 “””…””” 注: 換行符號 ‘\n’ 會被加入

    • 字串組合 (‘…’ “…” ‘’’…’’’ “””…”””) 注: 最適合長字串分行使用

    • \在字串中為跳脫字元, r’…’可禁用轉義

    • 各引數中有start, end, 代表字串範圍為string[start : end]

    • 建立新物件 string.__new__(*args, **kwargs)

    • 字元長度 string.__len__()

    • 位元組長度 string.__sizeof__()

    • 字串表達 string.__repr__()

    • 物件屬性呼叫 string.__getattribute__(name) 當 屬性 name 被訪問時自動被呼叫, 無論 name 是否存在.

    • 索引取得 string.__getitem__(key) 注: 相當於 string[key]

    • 引數傳遞 string.__getnewargs__()

    • 迭代使用 string.__iter__()

    • 雜湊值 string.__hash__()

    • 空白字元(Whitespace)

      符號 程式碼 編碼 中文說明 英文說明
      HT ‘\t’ 0x09 水平製表符 Horizontal Tab
      LF ‘\n’ 0x0A 換行 Line Feed
      VT 0x0B 垂直製表符 Vertical Tab
      FF 0x0C 換頁 Form Feed
      CR ‘\r’ 0x0D 回車 Carriage Return
      FS 0x1C 檔案分隔符 File Separator
      GS 0x1D 組分隔符 Group Separator
      RS 0x1E 記錄分隔符 Record Separator
      US 0x1F 單位分隔符 Unit Separator
      HE 0x85 水平省略號 Horizontal Ellipsis
      NBSP 0xA0 不間斷空格 Non-Breaking Space
  2. 字串運算

    • 字串相加 string.__add__(value)
    • 字串重複 string.__mul__(value) 注: 供value*string語法使用
    • 字串重複 string.__rmul__(value) 注: 供string*value語法使用
  3. 字串比較

    • 等於 string.__eq__(value)
    • 不等於 string.__ne__(value)
    • 大於 string.__gt__(value)
    • 大於等於 string.__ge__(value)
    • 小於 string.__lt__(value)
    • 小於等於 string.__le__(value)
  4. 字串搜尋

    • 從頭找副字串位置 string.index(sub, start, end) 注: 找不到時會出錯 ValueError
    • 從尾找副字串位置 string.rindex(sub, start, end) 注: 找不到時會出錯 ValueError
    • 從頭找副字串位置 string.find(sub, start, end) 注: 找不到會返回 -1
    • 從尾找副字串位置 string.rfind(sub, start, end) 注: 找不到會返回 -1
    • 子字串出現的次數 string.count(sub, start, end) 注: 搜尋不會重複處理
  5. 字串取代

    • 子字串 string.replace(old, new, count=-1) 注: count預設值為-1代表全部取代; 取代不會重複處理
    • 以空白’ ‘取代定位符’\t’ string.expandtabs(tabsize=8) 注: 預設為8個空格
  6. 字串空白字元或指定字元去頭去尾

    • 去頭去尾 string.strip(chars=None)
    • 去頭 string.lstrip(chars=None)
    • 去尾 string.rtrip(chars=None)
  7. 字串寛度的位置調整及填入字元

    • 置中 string.center(width, fillchar=' ')
    • 置左 string.ljust(width, fillchar=' ')
    • 置右 string.rjust(width, fillchar=' ')
    • 左填'0' string.zfill(width)
  8. 字串分割與組合

    • 多重左分割 string.split(sep=None, maxsplit=-1) 注: 按sep來分割成list, maxsplit最大分割數, -1表全部分割.
    • 多重右分割 string.rsplit(sep=None, maxsplit=-1) 注: 按sep來分割成list, maxsplit最大分割數, -1表全部分割.
    • 組合 string.join(iterable) 注: 以string作為間隔來組合iterable序列中的字串
    • 從左三分割 string.partition(sep) 注: 以sep分割, 返回 [前字串, sep, 後字串], 找不到sep, 返回 [字串, '', '']
    • 從右三分割 string.rpartition(sep) 注: 以sep分割, 返回 [前字串, sep, 後字串], 找不到sep, 返回 [字串, '', '']
    • 行分割 string.splitlines(keepends=False) 注: 返回每一行的list, keepends表示分行符保留, LF, VT, FF, CR, FS, GS, RS, HE 都會造成分行.
  9. 字串格式轉換

    • 格式化

      • string.__format__(format_spec)

      • string.__mod__(value) 注: string中%[flags] [width] [.precision] type指定格式來轉換value, 供語法 string % value 使用

      • string.__rmod__(value) 注: string中%[flags] [width] [.precision] type指定格式來轉換value, 供語法 value % string 使用; 本函式功能未建立.

      • string.format(*args, **kwargs) 替代string中的{ }

      • string.format_map(mapping) 以mapping替代string中的{ }

        >>> class Class():
        >>>     def __missing__(self, key):
        >>>         return key
        >>> print('{this} is a {book}, not a {bag} !'.format_map(Class(this='that', book='book')))
        that is a book, not a bag !
        >>>
    • 字串轉換

      • 轉字串 string.__str__()
      • 編碼 string.encode(encoding='utf-8', errors='strict')
      • 按錶轉碼 string.translate(table)
        • table {key:value, }
          • key: Unicode ordinal
          • value: Unicode ordinal, strings 或 None
        • table 可以是字典或列表的例項, 必須具有來自__getitem__的lookup/indexing方法
        • 如果表中找不到, 該字母直接輸出; 如果value是None, LookupError Exception, 該字母會被刪除.
      • 建立轉換表 string.maketrans(dictionary | x, y, z)
        • dictionary 直接建表
        • x, y, z 其中 x, y 須同長度的字串, 由x對應到y, z字串表示為None, 要刪除的字母.
  10. 字串中字母

    • 轉換
      • 每個字母轉大寫 string.upper()
      • 每個字母轉小寫 string.lower()
      • 每個字母轉小寫 string.casefold() 注: 會轉換某些特殊字元, 而string.lower()不會, 比如擴充ASCII碼.
      • 只有字串的第一個字母轉大寫, 其他轉小寫 string.capitalize()
      • 每個字第一個字母轉大寫, 其他轉小寫 string.title()
      • 每個字母大小寫互換 string.swapcase()
    • 判斷
      • 包含子字串 string.__contains__(value)
      • ASCII碼 string.isascii() 注: 字碼0~127, 還有空字串''都為True
      • 字母或數字 string.isalnum() 注: 絶大部份的字碼都是, 沒什麼用
      • 字母 string.isalpha() 注: 絶大部份的字碼都是, 沒什麼用
      • 大寫字母 string.isupper()
      • 小寫字母 string.islower()
      • 每個字第一個字母大寫, 其他為小寫 string.istitle()
      • 十進位制數(0~9) string.isdecimal()
      • 數字 string.isdigit() 注: 包含 Numeric_Type 為 Digit 及 Decimal
      • 數字string.isnumeric() 注: 包含 Numeric_Type 為 Digit, Decimal 及 Numeric
      • Python有效的識別符號 string.isidentifier()
        • Python的保留字 keyword.iskeyword(string)
      • 可列印字 string.isprintable() 注: 判斷repr(string); 空字串也是True
      • 空白字串 string.isspace()
      • 結尾字串 string.endswitch(suffix, start, end) 注: 結尾字串可以是多條件OR判斷, 以tuple表示.
      • 起始字串 string.startswith(prefix, start, end) 注: 起始字串可以是多條件OR判斷, 以tuple表示.
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Jason Yang

相關文章