在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 字符串(4)
標(biāo)準(zhǔn)庫(kù) (4)
如何成為 Python 高手
標(biāo)準(zhǔn)庫(kù) (6)
標(biāo)準(zhǔn)庫(kù) (3)
類(2)
Pandas 使用 (2)
xml
用 tornado 做網(wǎng)站 (5)
文件(1)
練習(xí)
列表(3)
從小工到專家
除法
錯(cuò)誤和異常 (2)
函數(shù)(1)
用 tornado 做網(wǎng)站 (7)
為做網(wǎng)站而準(zhǔn)備
函數(shù)練習(xí)
標(biāo)準(zhǔn)庫(kù) (8)
Pandas 使用 (1)
回顧 list 和 str
字典(1)
用 tornado 做網(wǎng)站 (3)
字符串(1)
函數(shù)(2)
寫一個(gè)簡(jiǎn)單的程序
將數(shù)據(jù)存入文件
語(yǔ)句(5)
SQLite 數(shù)據(jù)庫(kù)
集成開發(fā)環(huán)境(IDE)
集合(1)
類(1)
用 tornado 做網(wǎng)站 (6)
用 tornado 做網(wǎng)站 (2)
自省
語(yǔ)句(4)
錯(cuò)誤和異常 (1)
用 tornado 做網(wǎng)站 (4)
集合(2)
列表(1)
標(biāo)準(zhǔn)庫(kù) (1)
生成器
mysql 數(shù)據(jù)庫(kù) (1)
第三方庫(kù)
實(shí)戰(zhàn)
運(yùn)算符
類(3)
字典(2)
語(yǔ)句(1)
數(shù)和四則運(yùn)算
語(yǔ)句(2)
文件(2)
MySQL 數(shù)據(jù)庫(kù) (2)
電子表格
迭代器
mongodb 數(shù)據(jù)庫(kù) (1)
特殊方法 (2)
特殊方法 (1)
字符編碼
編寫模塊
用 tornado 做網(wǎng)站 (1)
標(biāo)準(zhǔn)庫(kù) (5)
函數(shù)(4)
類(5)
字符串(2)
關(guān)于 Python 的故事
函數(shù)(3)
字符串(4)
處理股票數(shù)據(jù)
常用數(shù)學(xué)函數(shù)和運(yùn)算優(yōu)先級(jí)
字符串(3)
為計(jì)算做準(zhǔn)備
多態(tài)和封裝
類(4)
迭代
語(yǔ)句(3)
錯(cuò)誤和異常 (3)
分析 Hello
Python 安裝
標(biāo)準(zhǔn)庫(kù) (2)
列表(2)
元組

字符串(4)

字符串的內(nèi)容的確不少,甚至都有點(diǎn)啰嗦了。但是,本節(jié)依然還要繼續(xù),就是因?yàn)樵诰幊虒?shí)踐中,經(jīng)常會(huì)遇到有關(guān)字符串的問(wèn)題,而且也是很多初學(xué)者容易迷茫的。

字符串格式化輸出

什么是格式化?在維基百科中有專門的詞條,這么說(shuō)的:

格式化是指對(duì)磁盤或磁盤中的分區(qū)(partition)進(jìn)行初始化的一種操作,這種操作通常會(huì)導(dǎo)致現(xiàn)有的磁盤或分區(qū)中所有的文件被清除。

不知道你是否知道這種“格式化”。顯然,此格式化非我們這里所說(shuō)的,我們說(shuō)的是字符串的格式化,或者說(shuō)成“格式化字符串”,都可以,表示的意思就是:

格式化字符串,是 C、C++ 等程序設(shè)計(jì)語(yǔ)言 printf 類函數(shù)中用于指定輸出參數(shù)的格式與相對(duì)位置的字符串參數(shù)。其中的轉(zhuǎn)換說(shuō)明(conversion specification)用于把隨后對(duì)應(yīng)的 0 個(gè)或多個(gè)函數(shù)參數(shù)轉(zhuǎn)換為相應(yīng)的格式輸出;格式化字符串中轉(zhuǎn)換說(shuō)明以外的其它字符原樣輸出。

這也是來(lái)自維基百科的定義。在這個(gè)定義中,是用 C 語(yǔ)言作為例子,并且用了其輸出函數(shù)來(lái)說(shuō)明。在 Python 中,也有同樣的操作和類似的函數(shù) print,此前我們已經(jīng)了解一二了。

如果將那個(gè)定義說(shuō)的通俗一些,字符串格式化化,就是要先制定一個(gè)模板,在這個(gè)模板中某個(gè)或者某幾個(gè)地方留出空位來(lái),然后在那些空位填上字符串。那么,那些空位,需要用一個(gè)符號(hào)來(lái)表示,這個(gè)符號(hào)通常被叫做占位符(僅僅是占據(jù)著那個(gè)位置,并不是輸出的內(nèi)容)。

>>> "I like %s"
'I like %s'

在這個(gè)字符串中,有一個(gè)符號(hào):%s,就是一個(gè)占位符,這個(gè)占位符可以被其它的字符串代替。比如:

>>> "I like %s" % "python"
'I like python'
>>> "I like %s" % "Pascal"
'I like Pascal'

這是較為常用的一種字符串輸出方式。

另外,不同的占位符,會(huì)表示那個(gè)位置應(yīng)該被不同類型的對(duì)象填充。下面列出許多,供參考。不過(guò),不用記憶,常用的只有 %s%d,或者再加上 %f,其它的如果需要了,到這里來(lái)查即可。

占位符 說(shuō)明
%s 字符串(采用 str()的顯示)
%r 字符串(采用 repr()的顯示)
%c 單個(gè)字符
%b 二進(jìn)制整數(shù)
%d 十進(jìn)制整數(shù)
%i 十進(jìn)制整數(shù)
%o 八進(jìn)制整數(shù)
%x 十六進(jìn)制整數(shù)
%e 指數(shù) (基底寫為 e)
%E 指數(shù) (基底寫為 E)
%f 浮點(diǎn)數(shù)
%F 浮點(diǎn)數(shù),與上相同
%g 指數(shù)(e) 或浮點(diǎn)數(shù) (根據(jù)顯示長(zhǎng)度)
%G 指數(shù)(E)或浮點(diǎn)數(shù) (根據(jù)顯示長(zhǎng)度)

看例子:

>>> a = "%d years" % 15
>>> print a
15 years

當(dāng)然,還可以在一個(gè)字符串中設(shè)置多個(gè)占位符,就像下面一樣

>>> print "Suzhou is more than %d years. %s lives in here." % (2500, "qiwsir")
Suzhou is more than 2500 years. qiwsir lives in here.

對(duì)于浮點(diǎn)數(shù)字的打印輸出,還可以限定輸出的小數(shù)位數(shù)和其它樣式。

>>> print "Today's temperature is %.2f" % 12.235
Today's temperature is 12.23
>>> print "Today's temperature is %+.2f" % 12.235
Today's temperature is +12.23

注意,上面的例子中,沒(méi)有實(shí)現(xiàn)四舍五入的操作。只是截取。

關(guān)于類似的操作,還有很多變化,比如輸出格式要寬度是多少等等。如果看官在編程中遇到了,可以到網(wǎng)上查找。我這里給一個(gè)參考圖示,也是從網(wǎng)上抄來(lái)的。

其實(shí),上面這種格式化方法,常常被認(rèn)為是太“古老”了。因?yàn)樵?Python 中還有新的格式化方法。

>>> s1 = "I like {}".format("python")
>>> s1
'I like python'
>>> s2 = "Suzhou is more than {} years. {} lives in here.".format(2500, "qiwsir") 
>>> s2
'Suzhou is more than 2500 years. qiwsir lives in here.'

這就是 Python 非常提倡的 string.format()的格式化方法,其中 {} 作為占位符。

這種方法真的是非常好,而且非常簡(jiǎn)單,只需要將對(duì)應(yīng)的東西,按照順序在 format 后面的括號(hào)中排列好,分別對(duì)應(yīng)占位符 {} 即可。我喜歡的方法。

如果你覺得還不明確,還可以這樣來(lái)做。

>>> print "Suzhou is more than {year} years. {name} lives in here.".format(year=2500, name="qiwsir") 
Suzhou is more than 2500 years. qiwsir lives in here.

真的很簡(jiǎn)潔,看成優(yōu)雅。

其實(shí),還有一種格式化的方法,被稱為“字典格式化”,這里僅僅列一個(gè)例子,如果看官要了解字典的含義,本教程后續(xù)會(huì)有的。

>>> lang = "Python"
>>> print "I love %(program)s"%{"program":lang}
I love Python

列舉了三種基本格式化的方法,你喜歡那種?我推薦:string.format()

常用的字符串方法

字符串的方法很多??梢酝ㄟ^(guò) dir 來(lái)查看:

>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

這么多,不會(huì)一一介紹,要了解某個(gè)具體的含義和使用方法,最好是使用 help 查看。舉例:

>>> help(str.isalpha)

Help on method_descriptor:

isalpha(...)
    S.isalpha() -> bool

    Return True if all characters in S are alphabetic
    and there is at least one character in S, False otherwise.

按照這里的說(shuō)明,就可以在交互模式下進(jìn)行實(shí)驗(yàn)。

>>> "python".isalpha()    # 字符串全是字母,應(yīng)該返回 True
True
>>> "2python".isalpha()    # 字符串含非字母,返回 False
False

split

這個(gè)函數(shù)的作用是將字符串根據(jù)某個(gè)分割符進(jìn)行分割。

>>> a = "I LOVE PYTHON"
>>> a.split(" ")
['I', 'LOVE', 'PYTHON']

這是用空格作為分割,得到了一個(gè)名字叫做列表(list)的返回值,關(guān)于列表的內(nèi)容,后續(xù)會(huì)介紹。還能用別的分隔嗎?

>>> b = "www.itdiffer.com"
>>> b.split(".")
['www', 'itdiffer', 'com']

去掉字符串兩頭的空格

這個(gè)功能,在讓用戶輸入一些信息的時(shí)候非常有用。有的朋友喜歡輸入結(jié)束的時(shí)候敲擊空格,比如讓他輸入自己的名字,輸完了,他來(lái)個(gè)空格。有的則喜歡先加一個(gè)空格,總做的輸入的第一個(gè)字前面應(yīng)該空兩個(gè)格。

這些空格是沒(méi)用的。Python 考慮到有不少人可能有這個(gè)習(xí)慣,因此就幫助程序員把這些空格去掉。

方法是:

  • S.strip() 去掉字符串的左右空格
  • S.lstrip() 去掉字符串的左邊空格
  • S.rstrip() 去掉字符串的右邊空格

例如:

>>> b=" hello "    # 兩邊有空格
>>> b.strip()
'hello'
>>> b
' hello '

特別注意,原來(lái)的值沒(méi)有變化,而是新返回了一個(gè)結(jié)果。

>>> b.lstrip()    # 去掉左邊的空格
'hello '
>>> b.rstrip()    # 去掉右邊的空格
' hello'

字符大小寫的轉(zhuǎn)換

對(duì)于英文,有時(shí)候要用到大小寫轉(zhuǎn)換。最有名駝峰命名,里面就有一些大寫和小寫的參合。如果有興趣,可以來(lái)這里看自動(dòng)將字符串轉(zhuǎn)化為駝峰命名形式的方法。

在 Python 中有下面一堆內(nèi)建函數(shù),用來(lái)實(shí)現(xiàn)各種類型的大小寫轉(zhuǎn)化

  • S.upper() #S 中的字母大寫
  • S.lower() #S 中的字母小寫
  • S.capitalize() # 首字母大寫
  • S.isupper() #S 中的字母是否全是大寫
  • S.islower() #S 中的字母是否全是小寫
  • S.istitle()

看例子:

>>> a = "qiwsir,Python" 
>>> a.upper()       # 將小寫字母完全變成大寫字母
'QIWSIR,PYTHON'
>>> a               # 原數(shù)據(jù)對(duì)象并沒(méi)有改變
'qiwsir,Python'
>>> b = a.upper()
>>> b
'QIWSIR,PYTHON'
>>> c = b.lower()   # 將所有的小寫字母變成大寫字母
>>> c
'qiwsir,Python'

>>> a
'qiwsir,Python'
>>> a.capitalize()  # 把字符串的第一個(gè)字母變成大寫
'Qiwsir,Python'
>>> a               # 原數(shù)據(jù)對(duì)象沒(méi)有改變
'qiwsir,Python'
>>> b = a.capitalize() # 新建立了一個(gè)
>>> b
'Qiwsir,Python'

>>> a = "qiwsir,github"    # 這里的問(wèn)題就是網(wǎng)友白羽毛指出的,非常感謝他。
>>> a.istitle()
False
>>> a = "QIWSIR"        # 當(dāng)全是大寫的時(shí)候,返回 False
>>> a.istitle()
False
>>> a = "qIWSIR"
>>> a.istitle()
False
>>> a = "Qiwsir,github"  # 如果這樣,也返回 False
>>> a.istitle()
False
>>> a = "Qiwsir"        # 這樣是 True
>>> a.istitle()
True
>>> a = 'Qiwsir,Github' # 這樣也是 True
>>> a.istitle()
True

>>> a = "Qiwsir"
>>> a.isupper()
False
>>> a.upper().isupper()
True
>>> a.islower()
False
>>> a.lower().islower()
True

順著白羽毛網(wǎng)友指出的,再探究一下,可以這么做:

>>> a = "This is a Book"
>>> a.istitle()
False
>>> b = a.title()     # 這樣就把所有單詞的第一個(gè)字母轉(zhuǎn)化為大寫
>>> b
'This Is A Book'
>>> b.istitle()       # 判斷每個(gè)單詞的第一個(gè)字母是否為大寫
True

join 拼接字符串

用“+”能夠拼接字符串,但不是什么情況下都能夠如愿的。比如,將列表(關(guān)于列表,后續(xù)詳細(xì)說(shuō),它是另外一種類型)中的每個(gè)字符(串)元素拼接成一個(gè)字符串,并且用某個(gè)符號(hào)連接,如果用“+”,就比較麻煩了(是能夠?qū)崿F(xiàn)的,麻煩)。

用字符串的 join 就比較容易實(shí)現(xiàn)。

>>> b
'www.itdiffer.com'
>>> c = b.split(".")
>>> c
['www', 'itdiffer', 'com']
>>> ".".join(c)
'www.itdiffer.com'
>>> "*".join(c)
'www*itdiffer*com'

這種拼接,是不是簡(jiǎn)單呢?


總目錄   |   上節(jié):字符串(3)   |   下節(jié):字符編碼

如果你認(rèn)為有必要打賞我,請(qǐng)通過(guò)支付寶:qiwsir@126.com,不勝感激。