Python 字符串


# coding = utf-8

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

# 1、字符串的基本操作

# website = 'http://www.python.org'
# website[-3:] = 'com' 對字符串修改會報錯
# print(website)

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

# %s
# 在%左側(cè)指定一個字符串(格式字符串),并在右邊指定要設(shè)置的值。
# 在指定要設(shè)置的值時,可使用單個值(如字符串或數(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
# 每個替換字段都用花括號{}括起來,其中可能包含名稱,還可能包含有關(guān)如何對相應(yīng)的值進行轉(zhuǎn)換和格式設(shè)置的信息

# 替換字段沒有名稱
a = '{}, {} and {}'.format("first", "second", "third")
print(a)
print()
# 替換字段將索引用作名稱
a = '{0}, {1}, and {2}'.format("first", "second", "third")
print(a)
print()
# 對應(yīng)值無序
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é)果中包含花括號,可在格式字符串中使用兩個花括號 及{{或}}來指定
a = "{{Hello World!}}".format()
print(a)
print()



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

# 3.1 替換字段名
# 在最簡單的情況下,只需向format 提供要設(shè)置其格式的未命名參數(shù),并在格式字符串中使用未命名字段
# 此時,將按順序?qū)⒆侄魏蛥?shù)配對
a = "{}, {}, {}, {}".format(1, 2, 3, 4)
print(a)
print()
# 給參數(shù)指定名稱,這種參數(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()

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

# 不能同時使用手動編號和自動編號
# a = "{1}, {}, {0}, {}".format(1, 2, 3, 4) 會報錯
# print(a)
# print()

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

# 可以使用句點表示法來訪問導(dǎo)入的模塊中的方法 函數(shù) 屬性 變量
# _name_包含指定模塊的名稱
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)換標志
# s表示str r表示repr a表示ascii
a = "{pi!s}, {pi!r}, {pi!a}".format(pi = "π")
print(a)
# 還可以指定要轉(zhuǎn)換值得類型
a = "The number is {num}".format(num = 42)
print(a)
a = "The number is {num:.2f}".format(num = 42)
print(a)
# 二進制處理
a = "The number is {num:b}".format(num = 42)
print(a)
print()

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



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


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

# 可以使用填充字符來擴充對齊說明符
a = "{:$^10}".format("Hello")
print(a)
print()


# 符號說明符 '-' '+' ' '
# 默認是減號'-'
# 如果要給正數(shù)加'+' '+'
# 如果用空格,則會在正數(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()

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

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

# 代碼示例
# 分兩次設(shè)置字符串的格式 第一次設(shè)置將作為格式說明符的寬度,第二次設(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、字符串方法
# 字符串很多方法來源于string模塊
# 模塊string中常用的常量

# import string
# string.digits:包含數(shù)字0~9的字符串
# string.ascii_letters:包含所有ASCII字母(大寫和小寫)的字符串
# string.ascii_lowercase: 包含所有小寫ASCII字母的字符串
# string.printable:包含所有可打印的ASCII字符的字符串
# string.punctuation:包含所有ASCII標點字符的字符串
# string.ascii_uppercase:包含所有大寫ASCII字母的字符串
# 上面所說的ASCII字符,實際上是未解碼的Unicode字符串



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

# 4.1  center
# 方法center 通過在兩邊添加填充字符(默認空格),使字符串居中

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


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

# 4.2 find
# 方法find 在字符串中查找子串,如果找到返回第一個子串的第一個字符的索引,否則返回-1
# 方法find 有返回值,返回的是整數(shù)類型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()

# 還可以指定搜索的起點 終點
# find 第二個參數(shù) 和 第三個參數(shù) 分別指定了起點和終點 但不包含終點
a = '$$$ Get rich now!!! $$$'
print(a.find('$$$',1)) #只指定起點
print(a.find('!!!'))
print(a.find('!!!',0,16)) #指定起點和終點
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相反 將字符串以某個元素分隔成序列
dirs = '/usr/bin/env'
print(dirs.split('/'))
print()


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

# 4.4 lower
# 方法lower 返回字符串的小寫版本
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)換成 詞首大寫 即所有單詞的首字母大寫,其他小寫
# 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 將指定子串 都 替換成另一個字符串,并返回替換后的結(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()

# 如果沒有指定分隔符 將默認在單個或多個連續(xù)的空白字符(空格、制表符、換行符等)處進行拆分
a = 'Using the default'
print(a.split())
print()


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

# 4.7 strip
# 方法 strip將在字符串開頭和結(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一樣替換字符串的指定部分,但不同的是 它只能進行單字符替換
# 這個方法的優(yōu)勢在于可以同時替換多個字符,效率要比replace高
# 使用translate前必須創(chuàng)建一個轉(zhuǎn)換表,這個轉(zhuǎn)換表指出不同Unicode間的轉(zhuǎn)換關(guān)系

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

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


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

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

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




?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容