Python 字符串


# coding = utf-8

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

# 1、字符串的基本操作

# website = 'http://www.python.org'
# website[-3:] = 'com' 对字符串修改会报错
# print(website)

###################################################################
# 2、设置字符串的格式

# %s
# 在%左侧指定一个字符串(格式字符串),并在右边指定要设置的值。
# 在指定要设置的值时,可使用单个值(如字符串或数字),指定多个值时可使用元组
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
# 每个替换字段都用花括号{}括起来,其中可能包含名称,还可能包含有关如何对相应的值进行转换和格式设置的信息

# 替换字段没有名称
a = '{}, {} and {}'.format("first", "second", "third")
print(a)
print()
# 替换字段将索引用作名称
a = '{0}, {1}, and {2}'.format("first", "second", "third")
print(a)
print()
# 对应值无序
a = '{3} {0} {2} {1} {3} {0}'.format("be", "not", "or", "to")
print(a)
print()
# 替换字段包含名字及格式设置信息
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、设置字符串格式 完整版
# 要在结果中包含花括号,可在格式字符串中使用两个花括号 及{{或}}来指定
a = "{{Hello World!}}".format()
print(a)
print()



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

# 3.1 替换字段名
# 在最简单的情况下,只需向format 提供要设置其格式的未命名参数,并在格式字符串中使用未命名字段
# 此时,将按顺序将字段和参数配对
a = "{}, {}, {}, {}".format(1, 2, 3, 4)
print(a)
print()
# 给参数指定名称,这种参数将被用于相应的替换字段中
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()

# 通过索引来指定要在哪个字段中使用相应的未命名参数
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()

# 可以使用句点表示法来访问导入的模块中的方法 函数 属性 变量
# _name_包含指定模块的名称
import math
tmpl = "The {mod.__name__} module defines the value {mod.pi} for π".format(mod = math)
print(tmpl)
print()


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

# 3.2 基本转换
# 转换标志
# s表示str r表示repr a表示ascii
a = "{pi!s}, {pi!r}, {pi!a}".format(pi = "π")
print(a)
# 还可以指定要转换值得类型
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 将整数表示为 二进制数
# c 将整数解读为Unicode 码点
# d 十进制
# e 科学表示法 用e表示小数
# E 科学表示法 用E表示指数
# f 将小数表示为定点数
# F 与f相同 但对于特殊值(nan inf),使用大写表示
# g 自动在定点表示法 和 科学表示法之间做出选择。这是默认用于小数的说明符 但在默认情况下至少有1位小数
# G 与g相同,但用大写来表示指数和特殊值
# o 八进制
# s 保持字符串格式不变,这是默认用于字符串的说明符
# x 16进制 小写字母
# X 16进制 大写字母
# % 表示百分比值



###################################################################
# 3.3 宽度 精度 和 千位分隔符
# 宽度 使用整数指定 冒号前后不能空格
# 数和字符串的对齐方式不同
a = "{num1:10}".format(num1 = 3)
print(a)
a = "{name:10}".format(name = 'Bob')
print(a)
print()
# 精度
# 精度也是使用整数指定 但需要在它前面加上一个表示小数点的句点
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填充
# 在指定宽度和精度的数前面加个标志
# 0填充
a = "{:010.2f}".format(pi)
print(a)
# 左对齐<  右对齐>  居中^
a = "{0:<10.2f}\n{0:^10.2f}\n{0:>10.2f}".format(pi)
print(a)
# = 将填充字符放到符号和数字之间
a = "{0:=10.2f}\n{1:=10.2f}".format(pi,-pi)
print(a)
print()

# 可以使用填充字符来扩充对齐说明符
a = "{:$^10}".format("Hello")
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()

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()

# 对于各种十进制 它要求必须包含小数点(对于类型g 它保留小数点后面的零)
a1 = "{:g}".format(4200000000000)
a2 = "{:#g}".format(4200000000000)
print(a1)
print(a2)
print()

# 代码示例
# 分两次设置字符串的格式 第一次设置将作为格式说明符的宽度,第二次设置字符串的内容

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:包含数字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 有返回值,返回的是整数类型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 第二个参数 和 第三个参数 分别指定了起点和终点 但不包含终点
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 将字符串转换成 词首大写 即所有单词的首字母大写,其他小写
# 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 将指定子串 都 替换成另一个字符串,并返回替换后的结果
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()

# 如果没有指定分隔符 将默认在单个或多个连续的空白字符(空格、制表符、换行符等)处进行拆分
a = 'Using the default'
print(a.split())
print()


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

# 4.7 strip
# 方法 strip将在字符串开头和结尾的空白或指定字符(但不包含中间的空白和指定符)删除,并返回删除后的结果

# 删除首尾空白 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一样替换字符串的指定部分,但不同的是 它只能进行单字符替换
# 这个方法的优势在于可以同时替换多个字符,效率要比replace高
# 使用translate前必须创建一个转换表,这个转换表指出不同Unicode间的转换关系

# 代码示例
# 将一段英语文本转换成带有德国口音的版本 因此必须将 c s转成 k z
# 使用translate前必须创建一个转换表,这个转换表指出不同Unicode间的转换关系
table = str.maketrans('cs','kz')
a = 'This is an incredible test'
print(a.translate(table))
print()

# maketrans 接受三个参数 第一个和第二个参数长度要一样,
# 它指定第一个参数中的每一个字符都对应的转换成第二个参数中的字符
# 第三个参数 指定要将哪些字母删除
table = str.maketrans('cs','kz',' ')
a = 'This is an incredible test'
print(a.translate(table))
print()


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

# 4.9 判断字符串是否满足特定的条件
# isspace isdigit isupper 是否空白 数字 大写

# string.capwords(s[, sep]) 使用split根据seq拆分s,将每项的首字母大写,再以空格为分隔符将它们合并起来




©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容