# 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,将每项的首字母大写,再以空格为分隔符将它们合并起来
Python 字符串
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- find():检测字符串中是否包含字符或子字符串,未查找到子字符串返回-1str.find(str, beg=0,...
- 反斜线“\”符号在Python中有什么特别 在Python中,反斜线“\”符号代表转义符,在实际使用过程中要求\后...
- 在讲 Python 字符串之前先了解一下常用的字符编码 常用三种字符编码发展 常用的三种字符编码与特点: ASCI...