摘要:徐徐徐徐將字符串轉換成小寫,其僅對編碼的字母有效。中文中文但這個方法并不完美將字符串所有字母變為大寫,會自動忽略不可轉成大寫的字符。甩甩徐字符串編碼徐參考資料內置類型字符串方法
字符串處理是非常常用的技能,但 Python 內置字符串方法太多,常常遺忘,為了便于快速參考,特地依據 Python 3.5.1 給每個內置方法寫了示例并進行了歸類,便于大家索引。
PS: 可以點擊概覽內的綠色標題進入相應分類或者通過右側邊欄文章目錄快速索引相應方法。
str.capitalize()
str.lower()
str.casefold()
str.swapcase()
str.title()
str.upper()
字符串格式輸出str.center(width[, fillchar])
str.ljust(width[, fillchar]); str.rjust(width[, fillchar])
str.zfill(width)
str.expandtabs(tabsize=8)
str.format(^args, ^^kwargs)
str.format_map(mapping)
字符串搜索定位與替換str.count(sub[, start[, end]])
str.find(sub[, start[, end]]); str.rfind(sub[, start[, end]])
str.index(sub[, start[, end]]); str.rindex(sub[, start[, end]])
str.replace(old, new[, count])
str.lstrip([chars]); str.rstrip([chars]); str.strip([chars])
static str.maketrans(x[, y[, z]]); str.translate(table)
字符串的聯合與分割str.join(iterable)
str.partition(sep); str.rpartition(sep)
str.split(sep=None, maxsplit=-1); str.rsplit(sep=None, maxsplit=-1)
str.splitlines([keepends])
字符串條件判斷str.endswith(suffix[, start[, end]]); str.startswith(prefix[, start[, end]])
str.isalnum()
str.isalpha()
str.isdecimal(); str.isdigit(); str.isnumeric()
str.isidentifier()
str.islower()
str.isprintable()
str.isspace()
str.istitle()
str.isupper()
字符串編碼str.encode(encoding="utf-8", errors="strict")
大小寫轉換 str.capitalize()將首字母轉換成大寫,需要注意的是如果首字沒有大寫形式,則返回原字符串。
"adi dog".capitalize() # "Adi dog" "abcd 徐".capitalize() # "Abcd 徐" "徐 abcd".capitalize() # "徐 abcd" "?".capitalize() # "SS"str.lower()
將字符串轉換成小寫,其僅對 ASCII 編碼的字母有效。
"DOBI".lower() # "dobi" "?".lower() # "?" 為德語小寫字母,其有另一種小寫 "ss", lower 方法無法轉換 # "?" "徐 ABCD".lower() # "徐 abcd"str.casefold()
將字符串轉換成小寫,Unicode 編碼中凡是有對應的小寫形式的,都會轉換。
"DOBI".casefold() # "dobi" "?".casefold() #德語中小寫字母 ? 等同于小寫字母 ss, 其大寫為 SS # "ss"str.swapcase()
對字符串字母的大小寫進行反轉。
"徐Dobi a123 ?".swapcase() #: "徐dOBI A123 SS" 這里的 ? 被轉成 SS 是一種大寫
但需要注意的是 s.swapcase().swapcase() == s 不一定為真:
u"xb5" # "μ" u"xb5".swapcase() # "Μ" u"xb5".swapcase().swapcase() # "μ" hex(ord(u"xb5".swapcase().swapcase())) Out[154]: "0x3bc"
這里 "Μ"(是 mu 不是 M) 的小寫正好與 "μ" 的寫法一致。
str.title()將字符串中每個“單詞”首字母大寫。其判斷“單詞”的依據則是基于空格和標點,所以應對英文撇好所有格或一些英文大寫的簡寫時,會出錯。
"Hello world".title() # "Hello World" "中文abc def 12gh".title() # "中文Abc Def 12Gh" # 但這個方法并不完美: "they"re bill"s friends from the UK".title() # "They"Re Bill"S Friends From The Uk"str.upper()
將字符串所有字母變為大寫,會自動忽略不可轉成大寫的字符。
"中文abc def 12gh".upper() # "中文ABC DEF 12GH"
需要注意的是 s.upper().isupper() 不一定為 True。
字符串格式輸出 str.center(width[, fillchar])將字符串按照給定的寬度居中顯示,可以給定特定的字符填充多余的長度,如果指定的長度小于字符串長度,則返回原字符串。
"12345".center(10, "*") # "**12345***" "12345".center(10) # " 12345 "str.ljust(width[, fillchar]); str.rjust(width[, fillchar])
返回指定長度的字符串,字符串內容居左(右)如果長度小于字符串長度,則返回原始字符串,默認填充為 ASCII 空格,可指定填充的字符串。
"dobi".ljust(10) # "dobi " "dobi".ljust(10, "~") # "dobi~~~~~~" "dobi".ljust(3, "~") # "dobi" "dobi".ljust(3) # "dobi"str.zfill(width)
用 "0" 填充字符串,并返回指定寬度的字符串。
"42".zfill(5) # "00042" "-42".zfill(5) # "-0042" "dd".zfill(5) # "000dd" "--".zfill(5) # "-000-" " ".zfill(5) # "0000 " "".zfill(5) # "00000" "ffffdffffddd".zfill(5) # "ffffdffffddd"str.expandtabs(tabsize=8)
用指定的空格替代橫向制表符,使得相鄰字符串之間的間距保持在指定的空格數以內。
tab = "1 23 456 7890 1112131415 161718192021" tab.expandtabs() # "1 23 456 7890 1112131415 161718192021" # "123456781234567812345678123456781234567812345678" 注意空格的計數與上面輸出位置的關系 tab.expandtabs(4) # "1 23 456 7890 1112131415 161718192021" # "12341234123412341234123412341234"str.format(^args, ^^kwargs)
格式化字符串的語法比較繁多,官方文檔已經有比較詳細的 examples,這里就不寫例子了,想了解的童鞋可以直接戳這里 Format examples.
str.format_map(mapping)類似 str.format(*args, **kwargs) ,不同的是 mapping 是一個字典對象。
People = {"name":"john", "age":56} "My name is {name},i am {age} old".format_map(People) # "My name is john,i am 56 old"字符串搜索定位與替換 str.count(sub[, start[, end]])
text = "outer protective covering" text.count("e") # 4 text.count("e", 5, 11) # 1 text.count("e", 5, 10) # 0str.find(sub[, start[, end]]); str.rfind(sub[, start[, end]])
text = "outer protective covering" text.find("er") # 3 text.find("to") # -1 text.find("er", 3) Out[121]: 3 text.find("er", 4) Out[122]: 20 text.find("er", 4, 21) Out[123]: -1 text.find("er", 4, 22) Out[124]: 20 text.rfind("er") Out[125]: 20 text.rfind("er", 20) Out[126]: 20 text.rfind("er", 20, 21) Out[129]: -1str.index(sub[, start[, end]]); str.rindex(sub[, start[, end]])
與 find() rfind() 類似,不同的是如果找不到,就會引發 ValueError。
str.replace(old, new[, count])"dog wow wow jiao".replace("wow", "wang") # "dog wang wang jiao" "dog wow wow jiao".replace("wow", "wang", 1) # "dog wang wow jiao" "dog wow wow jiao".replace("wow", "wang", 0) # "dog wow wow jiao" "dog wow wow jiao".replace("wow", "wang", 2) # "dog wang wang jiao" "dog wow wow jiao".replace("wow", "wang", 3) # "dog wang wang jiao"str.lstrip([chars]); str.rstrip([chars]); str.strip([chars])
" dobi".lstrip() # "dobi" "db.kun.ac.cn".lstrip("dbk") # ".kun.ac.cn" " dobi ".rstrip() # " dobi" "db.kun.ac.cn".rstrip("acn") # "db.kun.ac." " dobi ".strip() # "dobi" "db.kun.ac.cn".strip("db.c") # "kun.ac.cn" "db.kun.ac.cn".strip("cbd.un") # "kun.a"static str.maketrans(x[, y[, z]]); str.translate(table)
maktrans 是一個靜態方法,用于生成一個對照表,以供 translate 使用。
如果 maktrans 僅一個參數,則該參數必須是一個字典,字典的 key 要么是一個 Unicode 編碼(一個整數),要么是一個長度為 1 的字符串,字典的 value 則可以是任意字符串、None或者 Unicode 編碼。
a = "dobi" ord("o") # 111 ord("a") # 97 hex(ord("狗")) # "0x72d7" b = {"d":"dobi", 111:" is ", "b":97, "i":"u72d7u72d7"} table = str.maketrans(b) a.translate(table) # "dobi is a狗狗"
如果 maktrans 有兩個參數,則兩個參數形成映射,且兩個字符串必須是長度相等;如果有第三個參數,則第三個參數也必須是字符串,該字符串將自動映射到 None:
a = "dobi is a dog" table = str.maketrans("dobi", "alph") a.translate(table) # "alph hs a alg" table = str.maketrans("dobi", "alph", "o") a.translate(table) # "aph hs a ag"字符串的聯合與分割 str.join(iterable)
用指定的字符串,連接元素為字符串的可迭代對象。
"-".join(["2012", "3", "12"]) # "2012-3-12" "-".join([2012, 3, 12]) # TypeError: sequence item 0: expected str instance, int found "-".join(["2012", "3", b"12"]) #bytes 為非字符串 # TypeError: sequence item 2: expected str instance, bytes found "-".join(["2012"]) # "2012" "-".join([]) # "" "-".join([None]) # TypeError: sequence item 0: expected str instance, NoneType found "-".join([""]) # "" ",".join({"dobi":"dog", "polly":"bird"}) # "dobi,polly" ",".join({"dobi":"dog", "polly":"bird"}.values()) # "dog,bird"str.partition(sep); str.rpartition(sep)
"dog wow wow jiao".partition("wow") # ("dog ", "wow", " wow jiao") "dog wow wow jiao".partition("dog") # ("", "dog", " wow wow jiao") "dog wow wow jiao".partition("jiao") # ("dog wow wow ", "jiao", "") "dog wow wow jiao".partition("ww") # ("dog wow wow jiao", "", "") "dog wow wow jiao".rpartition("wow") Out[131]: ("dog wow ", "wow", " jiao") "dog wow wow jiao".rpartition("dog") Out[132]: ("", "dog", " wow wow jiao") "dog wow wow jiao".rpartition("jiao") Out[133]: ("dog wow wow ", "jiao", "") "dog wow wow jiao".rpartition("ww") Out[135]: ("", "", "dog wow wow jiao")str.split(sep=None, maxsplit=-1); str.rsplit(sep=None, maxsplit=-1)
"1,2,3".split(","), "1, 2, 3".rsplit() # (["1", "2", "3"], ["1,", "2,", "3"]) "1,2,3".split(",", maxsplit=1), "1,2,3".rsplit(",", maxsplit=1) # (["1", "2,3"], ["1,2", "3"]) "1 2 3".split(), "1 2 3".rsplit() # (["1", "2", "3"], ["1", "2", "3"]) "1 2 3".split(maxsplit=1), "1 2 3".rsplit(maxsplit=1) # (["1", "2 3"], ["1 2", "3"]) " 1 2 3 ".split() # ["1", "2", "3"] "1,2,,3,".split(","), "1,2,,3,".rsplit(",") # (["1", "2", "", "3", ""], ["1", "2", "", "3", ""]) "".split() # [] "".split("a") # [""] "bcd".split("a") # ["bcd"] "bcd".split(None) # ["bcd"]str.splitlines([keepends])
字符串以行界符為分隔符拆分為列表;當 keepends 為True,拆分后保留行界符,能被識別的行界符見官方文檔。
"ab c de fg kl ".splitlines() # ["ab c", "", "de fg", "kl"] "ab c de fg kl ".splitlines(keepends=True) # ["ab c ", " ", "de fg ", "kl "] "".splitlines(), "".split(" ") #注意兩者的區別 # ([], [""]) "One line ".splitlines() # (["One line"], ["Two lines", ""])字符串條件判斷 str.endswith(suffix[, start[, end]]); str.startswith(prefix[, start[, end]])
text = "outer protective covering" text.endswith("ing") # True text.endswith(("gin", "ing")) # True text.endswith("ter", 2, 5) # True text.endswith("ter", 2, 4) # Falsestr.isalnum()
字符串和數字的任意組合,即為真,簡而言之:
只要 c.isalpha(), c.isdecimal(), c.isdigit(), c.isnumeric() 中任意一個為真,則 c.isalnum() 為真。
"dobi".isalnum() # True "dobi123".isalnum() # True "123".isalnum() # True "徐".isalnum() # True "dobi_123".isalnum() # False "dobi 123".isalnum() # False "%".isalnum() # Falsestr.isalpha()
Unicode 字符數據庫中作為 “Letter”(這些字符一般具有 “Lm”, “Lt”, “Lu”, “Ll”, or “Lo” 等標識,不同于 Alphabetic) 的,均為真。
"dobi".isalpha() # True "do bi".isalpha() # False "dobi123".isalpha() # False "徐".isalpha() # Truestr.isdecimal(); str.isdigit(); str.isnumeric()
三個方法的區別在于對 Unicode 通用標識的真值判斷范圍不同:
isdecimal: Nd,
isdigit: No, Nd,
isnumeric: No, Nd, Nl
digit 與 decimal 的區別在于有些數值字符串,是 digit 卻非 decimal ,具體戳 這里
num = "u2155" print(num) # ? num.isdecimal(), num.isdigit(), num.isnumeric() # (False, False, True) num = "u00B2" print(num) # 2 num.isdecimal(), num.isdigit(), num.isnumeric() # (False, True, True) num = "1" #unicode num.isdecimal(), num.isdigit(), num.isnumeric() # (Ture, True, True) num = ""Ⅶ"" num.isdecimal(), num.isdigit(), num.isnumeric() # (False, False, True) num = "十" num.isdecimal(), num.isdigit(), num.isnumeric() # (False, False, True) num = b"1" # byte num.isdigit() # True num.isdecimal() # AttributeError "bytes" object has no attribute "isdecimal" num.isnumeric() # AttributeError "bytes" object has no attribute "isnumeric"str.isidentifier()
判斷字符串是否可為合法的標識符。
"def".isidentifier() # True "with".isidentifier() # True "false".isidentifier() # True "dobi_123".isidentifier() # True "dobi 123".isidentifier() # False "123".isidentifier() # Falsestr.islower()
"徐".islower() # False "?".islower() #德語大寫字母 # False "a徐".islower() # True "ss".islower() # True "23".islower() # False "Ab".islower() # Falsestr.isprintable()
判斷字符串的所有字符都是可打印字符或字符串為空。Unicode 字符集中 “Other” “Separator” 類別的字符為不可打印的字符(但不包括 ASCII 的空格(0x20))。
"dobi123".isprintable() # True "dobi123 ".isprintable() Out[24]: False "dobi 123".isprintable() # True "dobi.123".isprintable() # True "".isprintable() # Truestr.isspace()
判斷字符串中是否至少有一個字符,并且所有字符都是空白字符。
In [29]: " ".isspace() Out[29]: True In [30]: "".isspace() Out[30]: False In [31]: " ".isspace() Out[31]: Truestr.istitle()
判斷字符串中的字符是否是首字母大寫,其會忽視非字母字符。
"How Python Works".istitle() # True "How Python WORKS".istitle() # False "how python works".istitle() # False "How Python Works".istitle() # True " ".istitle() # False "".istitle() # False "A".istitle() # True "a".istitle() # False "甩甩Abc Def 123".istitle() # Truestr.isupper()
"徐".isupper() # False "DOBI".isupper() Out[41]: True "Dobi".isupper() # False "DOBI123".isupper() # True "DOBI 123".isupper() # True "DOBI 123".isupper() # True "DOBI_123".isupper() # True "_123".isupper() # False字符串編碼 str.encode(encoding="utf-8", errors="strict")
fname = "徐" fname.encode("ascii") # UnicodeEncodeError: "ascii" codec can"t encode character "u5f90"... fname.encode("ascii", "replace") # b"?" fname.encode("ascii", "ignore") # b"" fname.encode("ascii", "xmlcharrefreplace") # b"徐" fname.encode("ascii", "backslashreplace") # b"u5f90"參考資料
Python 內置類型字符串方法
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37812.html
Python 中通過函數定義所創建的用戶自定義函數對象均具有一些特殊屬性,需要注意的是這里介紹的是自定義函數(function類型)的特殊屬性,而非方法(method 類型)的特殊屬性,函數和方法的特熟屬性以及默認的返回值可能不盡相同。 對于大多數特殊屬性,可以通過下面這個例子示范一下: class Test(): def func(self, v = dog): 這里演...
摘要:判斷奇數是迭代器會根據提供的函數對指定序列做映射語法可以對可迭代對象中的每一個元素進行映射。 python內置庫詳解 1、引言2、內置庫詳解2.1 數據相關2.1...
人生苦短,我用Python 開發環境搭建安裝 Python驗證是否安裝成功安裝Pycharm配置pycharm 編碼規范基本語法規則保留字單行注釋多行注釋行與縮進多行語句數據類型空行等待用戶輸入print輸出 運算符算術運算符邏輯運算符成員運算符身份運算符運算符優先級 字符串訪問字符串中的值字符串更新合并連接字符串刪除空白startswith()方法endswith()方法字符串格式化...
小編寫這篇文章的主要目的,主要是給大家進行介紹,關于NumPy與Python內置列表計算標準差區別的相關介紹,希望可以給各位讀者帶來幫助。 1什么是Numpy NumPy,是NumericalPython的通稱,用以性能卓越計算機的應用和數據統計分析的前提包,像數理科學專用工具(pandas)和架構(Scikit-learn)中都采用上了NumPy這個包。 NumPy中的基本數據結構是n...
摘要:使用簡記后端掘金全稱為即消息隊列。優測優社區干貨精選老司機亂談編輯器之神掘金前言是一種信仰,我自從年有了這個信仰,已經個年頭了。 PHP 程序員進階學習書籍參考指南 - 后端 - 掘金PHP程序員進階學習書籍參考指南 @heiyeluren lastmodify: 2016/2/18 ... 當我們在談論前端加密時,我們在談些什么 - 前端 - 掘金潘建旭,豈安科技(www.bigse...
閱讀 3627·2023-04-26 02:32
閱讀 3905·2021-11-23 10:05
閱讀 2291·2021-10-08 10:04
閱讀 2711·2021-09-22 16:06
閱讀 3612·2021-09-22 15:27
閱讀 764·2019-08-30 15:54
閱讀 1698·2019-08-30 13:50
閱讀 2704·2019-08-29 13:56