Python 字符串


# coding = utf-8

###################################################################

# 1假勿、字符串的基本操作

# website = 'http://www.python.org'
# website[-3:] = 'com' 對(duì)字符串修改會(huì)報(bào)錯(cuò)
# print(website)

###################################################################
# 2、設(shè)置字符串的格式

# %s
# 在%左側(cè)指定一個(gè)字符串(格式字符串)淹魄,并在右邊指定要設(shè)置的值堡距。
# 在指定要設(shè)置的值時(shí),可使用單個(gè)值(如字符串或數(shù)字)缤沦,指定多個(gè)值時(shí)可使用元組
a = 'Hello, %s. %s enough for ya'
b = ('world', 'Hot')
print(a % b)

# 模板字符串
from string import  Template
tmpl = Template('Hello,$who! $what enough for ya')
tmpl.substitute(who = 'Mars', what = 'Dusty')
print(tmpl)
print()

# format
# 每個(gè)替換字段都用花括號(hào){}括起來(lái)缸废,其中可能包含名稱(chēng)驶社,還可能包含有關(guān)如何對(duì)相應(yīng)的值進(jìn)行轉(zhuǎn)換和格式設(shè)置的信息

# 替換字段沒(méi)有名稱(chēng)
a = '{}, {} and {}'.format("first", "second", "third")
print(a)
print()
# 替換字段將索引用作名稱(chēng)
a = '{0}, {1}, and {2}'.format("first", "second", "third")
print(a)
print()
# 對(duì)應(yīng)值無(wú)序
a = '{3} {0} {2} {1} {3} {0}'.format("be", "not", "or", "to")
print(a)
print()
# 替換字段包含名字及格式設(shè)置信息
from math import pi
a = '{name} is approximately {value:.2f}'.format(name = 'π', value = pi)
print(a)
print()

# 在python 3.6 中亡电,如果變量與替換字段同名,在字符串前加f
# from math import e
# f"Euler's constant is roughly {e}."


###################################################################
# 3、設(shè)置字符串格式 完整版
# 要在結(jié)果中包含花括號(hào)恕汇,可在格式字符串中使用兩個(gè)花括號(hào) 及{{或}}來(lái)指定
a = "{{Hello World!}}".format()
print(a)
print()



###################################################################

# 3.1 替換字段名
# 在最簡(jiǎn)單的情況下或辖,只需向format 提供要設(shè)置其格式的未命名參數(shù),并在格式字符串中使用未命名字段
# 此時(shí)缺谴,將按順序?qū)⒆侄魏蛥?shù)配對(duì)
a = "{}, {}, {}, {}".format(1, 2, 3, 4)
print(a)
print()
# 給參數(shù)指定名稱(chēng)瓣赂,這種參數(shù)將被用于相應(yīng)的替換字段中
a = "{foo},{bar},{rom},{tar}".format(bar = 2, foo = 3, rom = 5, tar =6)
print(a)
print()

# 兩者混用
a = "{foo} , {}, {bar}, {}".format( 1, 2, bar = 3, foo = 4)
print(a)
print()

# 通過(guò)索引來(lái)指定要在哪個(gè)字段中使用相應(yīng)的未命名參數(shù)
a = "{foo} , {1}, {bar}, {0}".format( 1, 2, bar = 3, foo = 4)
print(a)
print()

# 不能同時(shí)使用手動(dòng)編號(hào)和自動(dòng)編號(hào)
# a = "{1}, {}, {0}, {}".format(1, 2, 3, 4) 會(huì)報(bào)錯(cuò)
# print(a)
# print()

# 可訪(fǎng)問(wèn)其組成部分
fullname = ['Tome','Smith']
a = "Mr {name[1]}".format(name = fullname)
print(a)
print()

# 可以使用句點(diǎn)表示法來(lái)訪(fǎng)問(wèn)導(dǎo)入的模塊中的方法 函數(shù) 屬性 變量
# _name_包含指定模塊的名稱(chēng)
import math
tmpl = "The {mod.__name__} module defines the value {mod.pi} for π".format(mod = math)
print(tmpl)
print()


###################################################################

# 3.2 基本轉(zhuǎn)換
# 轉(zhuǎn)換標(biāo)志
# s表示str r表示repr a表示ascii
a = "{pi!s}, {pi!r}, {pi!a}".format(pi = "π")
print(a)
# 還可以指定要轉(zhuǎn)換值得類(lèi)型
a = "The number is {num}".format(num = 42)
print(a)
a = "The number is {num:.2f}".format(num = 42)
print(a)
# 二進(jìn)制處理
a = "The number is {num:b}".format(num = 42)
print(a)
print()

# 類(lèi)型
# b 將整數(shù)表示為 二進(jìn)制數(shù)
# c 將整數(shù)解讀為Unicode 碼點(diǎn)
# d 十進(jìn)制
# e 科學(xué)表示法 用e表示小數(shù)
# E 科學(xué)表示法 用E表示指數(shù)
# f 將小數(shù)表示為定點(diǎn)數(shù)
# F 與f相同 但對(duì)于特殊值(nan inf)煌集,使用大寫(xiě)表示
# g 自動(dòng)在定點(diǎn)表示法 和 科學(xué)表示法之間做出選擇苫纤。這是默認(rèn)用于小數(shù)的說(shuō)明符 但在默認(rèn)情況下至少有1位小數(shù)
# G 與g相同,但用大寫(xiě)來(lái)表示指數(shù)和特殊值
# o 八進(jìn)制
# s 保持字符串格式不變喊废,這是默認(rèn)用于字符串的說(shuō)明符
# x 16進(jìn)制 小寫(xiě)字母
# X 16進(jìn)制 大寫(xiě)字母
# % 表示百分比值



###################################################################
# 3.3 寬度 精度 和 千位分隔符
# 寬度 使用整數(shù)指定 冒號(hào)前后不能空格
# 數(shù)和字符串的對(duì)齊方式不同
a = "{num1:10}".format(num1 = 3)
print(a)
a = "{name:10}".format(name = 'Bob')
print(a)
print()
# 精度
# 精度也是使用整數(shù)指定 但需要在它前面加上一個(gè)表示小數(shù)點(diǎn)的句點(diǎn)
a = "The number is {t:.2f}".format(t = 20)
print(a)
print()
# 對(duì)于其他類(lèi)型也可以指定精度
a = "{:.5}".format('Guido van Rossum')
print(a)
print()
# 可使用逗號(hào)來(lái)指出你要添加千位分隔符
a = 'One googol is {:,}'.format(10 ** 10)
print(a)
print()


# 3.4 符號(hào)污筷、對(duì)齊和用0填充
# 在指定寬度和精度的數(shù)前面加個(gè)標(biāo)志
# 0填充
a = "{:010.2f}".format(pi)
print(a)
# 左對(duì)齊<  右對(duì)齊>  居中^
a = "{0:<10.2f}\n{0:^10.2f}\n{0:>10.2f}".format(pi)
print(a)
# = 將填充字符放到符號(hào)和數(shù)字之間
a = "{0:=10.2f}\n{1:=10.2f}".format(pi,-pi)
print(a)
print()

# 可以使用填充字符來(lái)擴(kuò)充對(duì)齊說(shuō)明符
a = "{:$^10}".format("Hello")
print(a)
print()


# 符號(hào)說(shuō)明符 '-' '+' ' '
# 默認(rèn)是減號(hào)'-'
# 如果要給正數(shù)加'+' '+'
# 如果用空格乍赫,則會(huì)在正數(shù)前面加空格
a = "{0:+.2f}\n{1: .2f}".format(pi,-pi)
print(a)
print()


a = "{0:-.2f}\n{1: .2f}".format(pi,-pi)
print(a)
print()

a = "{0: .2f}\n{1: .2f}".format(pi,-pi)
print(a)
print()

# # 格式符
# 對(duì)于二進(jìn)制 八進(jìn)制 十六進(jìn)制 將加上一個(gè)前綴
a1 = "{:b}".format(42)
a2 = "{:#b}".format(42)
print(a1)
print(a2)
print()

# 對(duì)于各種十進(jìn)制 它要求必須包含小數(shù)點(diǎn)(對(duì)于類(lèi)型g 它保留小數(shù)點(diǎn)后面的零)
a1 = "{:g}".format(4200000000000)
a2 = "{:#g}".format(4200000000000)
print(a1)
print(a2)
print()

# 代碼示例
# 分兩次設(shè)置字符串的格式 第一次設(shè)置將作為格式說(shuō)明符的寬度,第二次設(shè)置字符串的內(nèi)容

width =35
price_width =10
item_width = width - price_width

header_fmt ="{{:{}}}{{:>{}}}".format(item_width,price_width)
fmt        ="{{:{}}}{{:>{}}}".format(item_width,price_width)

print('=' * width)
print(header_fmt.format('Item','Price'))
print('-' * width)

print(fmt.format('Apples',0.4))
print(fmt.format('Pears',0.5))
print(fmt.format('Cantaloupes',1.92))
print(fmt.format('Prunes(4 lbs.)',12))

print('=' * width)


###################################################################

# 4惋增、字符串方法
# 字符串很多方法來(lái)源于string模塊
# 模塊string中常用的常量

# import string
# string.digits:包含數(shù)字0~9的字符串
# string.ascii_letters:包含所有ASCII字母(大寫(xiě)和小寫(xiě))的字符串
# string.ascii_lowercase: 包含所有小寫(xiě)ASCII字母的字符串
# string.printable:包含所有可打印的ASCII字符的字符串
# string.punctuation:包含所有ASCII標(biāo)點(diǎn)字符的字符串
# string.ascii_uppercase:包含所有大寫(xiě)ASCII字母的字符串
# 上面所說(shuō)的ASCII字符诈皿,實(shí)際上是未解碼的Unicode字符串



###################################################################

# 4.1  center
# 方法center 通過(guò)在兩邊添加填充字符(默認(rèn)空格)像棘,使字符串居中

a = 'Hello Word'.center(20)
print(a)
print()


###################################################################

# 4.2 find
# 方法find 在字符串中查找子串,如果找到返回第一個(gè)子串的第一個(gè)字符的索引措左,否則返回-1
# 方法find 有返回值避除,返回的是整數(shù)類(lèi)型int
a = 'Hello World, Python is very good'
print(a.find('Hello'))
print(a.find('Python'))
print()

a = '$$$ Get rich now! $$$'
print(a.find('$$$'))
print(a.find('Tom'))
print()

# 還可以指定搜索的起點(diǎn) 終點(diǎn)
# find 第二個(gè)參數(shù) 和 第三個(gè)參數(shù) 分別指定了起點(diǎn)和終點(diǎn) 但不包含終點(diǎn)
a = '$$$ Get rich now!!! $$$'
print(a.find('$$$',1)) #只指定起點(diǎn)
print(a.find('!!!'))
print(a.find('!!!',0,16)) #指定起點(diǎn)和終點(diǎn)
print()


###################################################################

# 4.3 join
# 方法join 合并字符序列中的元素  與split相反
a = ['1', '2', '3', '4', '5']
b = '+'
print(b.join(a))
print()

dirs = '', 'usr', 'bin', 'env'
print('/'.join(dirs))
print('C:' + '\\'.join(dirs))
print()

# splist 與join相反 將字符串以某個(gè)元素分隔成序列
dirs = '/usr/bin/env'
print(dirs.split('/'))
print()


###################################################################

# 4.4 lower
# 方法lower 返回字符串的小寫(xiě)版本
name = "Tom"
names = ['tom','smith','jones']
if name in names: print('Find it')
if name.lower() in names: print('Find it')
print()

# 方法title 將字符串轉(zhuǎn)換成 詞首大寫(xiě) 即所有單詞的首字母大寫(xiě),其他小寫(xiě)
# string 模塊里的capwords 和title一樣
name = 'tom smith'
print(name.title())
print()

from string import  capwords
name = 'tom smith'
print(capwords(name))
print()


print(capwords("that's all, folks"))
print()
###################################################################

# 4.5 replace
# 方法replace 將指定子串 都 替換成另一個(gè)字符串性宏,并返回替換后的結(jié)果
a = 'This is a test'
print(a.replace('is','eez'))
print()


###################################################################

# 4.6 split
# 方法split 與 join相反,用于將字符串拆分為序列
a = '1+2+3+4+5'
print(a.split('+'))
print()

a = '/usr/bin/env'
print(a.split('/'))
print()

# 如果沒(méi)有指定分隔符 將默認(rèn)在單個(gè)或多個(gè)連續(xù)的空白字符(空格书斜、制表符酵使、換行符等)處進(jìn)行拆分
a = 'Using the default'
print(a.split())
print()


###################################################################

# 4.7 strip
# 方法 strip將在字符串開(kāi)頭和結(jié)尾的空白或指定字符(但不包含中間的空白和指定符)刪除,并返回刪除后的結(jié)果

# 刪除首尾空白 strip()
a = '        internal    whitespace is kept        '
print(a.strip())
print()

name = 'tom  '
names = ['tom','jones','bob']
if name in names: print('Find it')
if name.strip() in names: print('Find it')
print()

# 刪除首尾指定字符 strip('ab')
a = '*** SPAM * For * Everyone!!!***'
print(a.strip('*!'))
print()


###################################################################

# 4.8 translate
# 方法translate與replace一樣替換字符串的指定部分样屠,但不同的是 它只能進(jìn)行單字符替換
# 這個(gè)方法的優(yōu)勢(shì)在于可以同時(shí)替換多個(gè)字符,效率要比replace高
# 使用translate前必須創(chuàng)建一個(gè)轉(zhuǎn)換表悦穿,這個(gè)轉(zhuǎn)換表指出不同Unicode間的轉(zhuǎn)換關(guān)系

# 代碼示例
# 將一段英語(yǔ)文本轉(zhuǎn)換成帶有德國(guó)口音的版本 因此必須將 c s轉(zhuǎn)成 k z
# 使用translate前必須創(chuàng)建一個(gè)轉(zhuǎn)換表栗柒,這個(gè)轉(zhuǎn)換表指出不同Unicode間的轉(zhuǎn)換關(guān)系
table = str.maketrans('cs','kz')
a = 'This is an incredible test'
print(a.translate(table))
print()

# maketrans 接受三個(gè)參數(shù) 第一個(gè)和第二個(gè)參數(shù)長(zhǎng)度要一樣知举,
# 它指定第一個(gè)參數(shù)中的每一個(gè)字符都對(duì)應(yīng)的轉(zhuǎn)換成第二個(gè)參數(shù)中的字符
# 第三個(gè)參數(shù) 指定要將哪些字母刪除
table = str.maketrans('cs','kz',' ')
a = 'This is an incredible test'
print(a.translate(table))
print()


###################################################################

# 4.9 判斷字符串是否滿(mǎn)足特定的條件
# isspace isdigit isupper 是否空白 數(shù)字 大寫(xiě)

# string.capwords(s[, sep]) 使用split根據(jù)seq拆分s,將每項(xiàng)的首字母大寫(xiě)蛙埂,再以空格為分隔符將它們合并起來(lái)




?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绣的,一起剝皮案震驚了整個(gè)濱河市欲账,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惩嘉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件文黎,死亡現(xiàn)場(chǎng)離奇詭異耸峭,居然都是意外死亡淋纲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)本涕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)菩颖,“玉大人,你說(shuō)我怎么就攤上這事位他。” “怎么了鹅髓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵窿冯,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我执桌,道長(zhǎng)芜赌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任膘壶,我火速辦了婚禮洲愤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亡问。我一直安慰自己肛宋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布慎框。 她就那樣靜靜地躺著后添,像睡著了一般遇西。 火紅的嫁衣襯著肌膚如雪严嗜。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天茄蚯,我揣著相機(jī)與錄音,去河邊找鬼渗常。 笑死,一個(gè)胖子當(dāng)著我的面吹牛询一,可吹牛的內(nèi)容都是我干的癌椿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缩功,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼都办!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起脆丁,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤槽卫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后歼培,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡查剖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年笋庄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倔监。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡静暂,死狀恐怖谱秽,靈堂內(nèi)的尸體忽然破棺而出摹迷,到底是詐尸還是另有隱情峡碉,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布异赫,位于F島的核電站塔拳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏峡竣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一颂碧、第九天 我趴在偏房一處隱蔽的房頂上張望类浪。 院中可真熱鬧,春花似錦诉瓦、人聲如沸力细。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逝慧。三九已至,卻和暖如春笛臣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捐祠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工踱蛀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人率拒。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓猬膨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親勃痴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容