[深入python]无处不在的字符串

字符串在大部分编程语言中,都属于核心类型,所有的程序基本上或多或少都会涉及一些关于字符串使用或者操作的内容,
那么今天就来深入了解一下python的字符串。

1. 基本数据结构,可以认为是字符的数据库或者是认为是字符的列表
2. 基本操作,初始化,尾部新增,替换新增,删,改,查,长度计算
3. 字符串的格式化
4. 高级操作,最大,最小,判断,统计,替换,插入,合并,拆分,大小写,去除空白
5. 编码问题
6. 字符串与其他类型的转换
7. 特殊前缀f,r,u,b”””
8. 字符转义问题
9. 最后是一个完整的简易记事本的代码

  • 字符串的基本操作,初始化,新增 / 拼接,删,改,查,长度计算
# 初始化
str_demo = 'This is demo string'

# 通过重载操作符%和+进行 新增/拼接
print('This is demo string ,字符串1' + ' ,字符串2')
print('This is demo string ,%s ,%s' % ('字符串1', '字符串2'))
# 通过函数进行 新增/拼接,format(核心方法),formap_map,join,Template
# format
print('This is demo string ,{} ,{}'.format('字符串1', '字符串2')) 

# format使用索引
print('This is demo string ,{1} ,{0}'.format('字符串2', '字符串1')) 

# format使用关键字参数
print('This is demo string ,{str1} ,{str2}'.format(str1='字符串1', str2='字符串2')) 

# format使用混合方式
print('This is demo string ,{} ,{str2}'.format('字符串1', str2='字符串2')) 

# 使用字典
print('This is demo string ,{str1} ,{str2}'.format_map({'str1': '字符串1', 'str2': '字符串2'})) 

# 使用join
print(''.join(['This is demo string ,', '字符串1 ,', '字符串2']))

# 使用Template
print(Template('This is demo string ,$str1 ,$str2').substitute(str1='字符串1', str2='字符串2'))
# 删除,不可变的字符串不可以删除,只能透过其他方法变通replace,`strip,translate
# 采用replace方案,但是删除多个不同值时非常麻烦,要多个replace
print('This is demo string ,{} ,{}'.format('字符串1', '字符串2').replace('字符串1', '')) 

# 采用strip方案,但是只能对两边进行删除
print('This is demo string ,{} ,{}'.format('字符串1', '字符串2').strip('字符串2'))

# 采用translate方案,可以进行精确到单个字符的删除
table = str.maketrans('', '', '字符串12')
print('This is demo string ,{} ,{}'.format('字符串1', '字符串2').translate(table))

# 如果试图采用以下替换删除的方案是不可行的,因为替换和删除是分开操作的
table = str.maketrans('字符串12', ' ' * 5, ' ')
print('This is demo string ,{} ,{}'.format('字符串1', '字符串2').translate(table))
# 修改,操作其实就是删除并替换的操作,使用前面的函数可以完成大部分的操作
# 上述的方案都是基于字符串是不可变的前提,如果把字符串转为可变的列表,那么可以基于列表进行操作后,再重新进行拼接
# 关于列表操作是个更复杂的操作可以视乎具体的业务需求进行操作,下面只是一个简单
str_demo = 'This is demo string 字符串1 字符串2'
str_list = str_demo .split(' ')
str_list.remove('字符串1')
str_list.remove('字符串2')
print(' '.join(str_list))
# 查找,主要使用find函数,第二个和第三个是查询的范围参数,index函数类似,但是查询不到时会报错,而find返回-1
print(str_demo.find('s'))
print(str_demo.index('11'))
# 长度计算
print(len(str_demo))
  • 字符串的格式化
    实际业务中,我们常常需要把非标准的字符串格式化成我们想要的字符串形式,
    一个是为了美观容易看,另一个是为了方便进一步的操作
# 基本格式化,s是普通字符串表示,r是python表示(这里是字符串字面量),a是ascii编码表示,f是浮点型,更多表示查阅文档
print('{demo!s} {demo!r} {demo!a}'.format(demo='测试'))
print('{num:f}'.format(num=77))

# 冒号后面的数值表示宽度,字符串不够指定宽度的情况下用空格填充,逗号表示千位用逗号分隔,.2f表示精度是两位小数,
#  ^表示居中对齐,紧跟着的0表示用0填充,center函数也可以达到居中效果
print('{demo:10}'.format(demo='测试')
print('{demo:20.2f}'.format(demo=40))
print('{demo:,.2f}'.format(demo=400000))
print('{demo:20,.2f}'.format(demo=400000))
print('{demo:^020.2f}'.format(demo=400000))
print('{demo}'.format(demo=400000).center(20))
  • 字符串的高级操作,最大,最小,判断,统计,替换,插入,合并,拆分,大小写,去除空白
# 最大,最小,这个是判断字符的ascii码大小
str_demo = '0123456789abcdefg'
print('[max]' + max(str_list), '[min]' + min(str_list))

# 判断,用于判断字符串是否符合特定条件,基本是以is打头的函数,比如判断是否空格
print(str_demo.isspace())
print(str_demo.isnumeric())
print('02' in str_demo)

# 替换,主要使用之前的replace和translate函数,这里不再赘述

# 插入,由于字符串是不可变的,所以要插入,需要将其转成可变的列表,在重新拼接,比如
str_list = list(str_demo)
str_list.insert(9,'测试')
str_demo = ''.join(str_list)
print(str_demo)

# 合并,使用join函数,这里不再赘述,但是需要注意,合并的序列也必须是字符串,不然会报错
# 拆分,使用split函数
# 去除空白,使用strip函数
# 大小写转换
print('abcdefg'.upper())
print('ABCDEFG'.lower())
  • 字符串的编码问题(这个问题比较复杂,将会在另一篇文章里说明)
  • 特殊前缀f,r,u,b
# f字符串是一个python3.6以后才出现的新功能,它的作用就尽可能简单的格式化字符串
name = 'hwx'
age = 12
print(f'{name},{age}')

# r表示原始字符串,它会原样输出所有字符,不进行转义,注意不能以反斜杠结尾
print(r'E:\python\demo\n')
# 如果必须要以反斜杠结尾,可以这么操作
print(r'E:\python\demo\n''\\')

# u表示unicode字符串,不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码。
# 中文必须表明所需编码, 否则一旦编码转换就会出现乱码
print(u'中文')

# b在python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b”“前缀代表的就是bytes 
# python2.x里, b前缀没什么具体意义, 只是为了兼容python3.x的这种写法
  • 字符转义问题
# 加反斜杠来进行转义
print('第一行\n第二行')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值