第四天 第五章 字符串格式化及编码

# 一、字符串常用操作

# 拼接字符串:用“+”号将两个字符串拼接起来。注:字符串不允许直接和其它类型拼接。

# 计算字符串长度:在python中,数字、英文、小数点、下划线、和空格占一个字节;一个汉字可能会占2-4个字节,取决于所用编码。
#               汉字在GBK/GB2312编码中占2个字节,在UTF-8/unicode编码中占3个(或4个)字节。


# len(string)用来计算字符串的长度
string = '人生苦短,我用python!'
print(len(string)) # 输出14 - 直接使用len()是统计字符个数,不管是汉字还是英文,或是标点符号。有一个算一个。
# 如果想获取所占字节,可以用encode()方法
print(len(string.encode('utf8'))) # 输出28 - utf8编码中文占3个字节,这里中文汉字和标点是7X3=21个字节,英文和标点是7个字节。
print(len(string.encode('gbk'))) # 输出21 - gbk编码中文占2个字节,这里中文汉字和标点是7X2=14个字节,英文和标点是7个字节。
print(len(string.encode('gb2312'))) # 输出21 - gb2312编码中文占2个字节,这里中文汉字和标点是7X2=14个字节,英文和标点是7个字节。
# 截取字符串:字符串可以和列表一样用切片功能 string[start : end : step]
# 如果指定索引不存在,则会抛出异常,可以用try...except捕获异常。
try:
    substring = string[30]
except IndexError:
    print('指定索引不存在')
# 分割、合并字符串
# string.split(sep,maxsplit) # sep用于指定分隔符,默认为所有空字符(空格/换行/制表符等)
                             # maxsplit指定分割次数,默认没有或指定为-1,表示无限制,否则返回指定个数,最大为maxsplit+1
# 注:如果不指定sep参数,也不能指定maxsplit参数。

# 合并字符串:strnew = string.join(iterable) # string是合并时的分隔符,可以是空。

# 检索字符串:
# count():检索指定字符串在另一个字符串中出现的次数。语法格式:str.count(sub[,start[,end]]) sub在str中出现了多少次,如果没有则返回0
# find(): 返回首次出现的索引值。语法格式:str.find(sub[,start[,end]]) sub在str中第一次出现的索引值,如果没有则返回-1
# rfind(): 从右向左寻找

# 判断某字符串是否存在:1/ sub in str返回真表示存在  2/ str.find(sub)>-1 表示存在
# index()同find()方法类似,但如果指定字串不存在的话会抛出异常。str.index(sub[,start[,end]])
# rindex()同index()方法,从右向左查找。

# startswith() 检索开头是否指定字串,返回布尔值,语法:str.startswith(sub[,start[,end]])
# endswith() 检索结尾是否指定字串,返回布尔值,语法:str.endswith(sub[,start[,end]])

# 字母的大小写转换upper()和lower()
strlowerupper = 'HELLO world'
print(strlowerupper.lower())
print(strlowerupper.upper())
# 去除字符串中的空格和特殊字符:strip()去除左右两侧,ltrip()去除左侧,rstrip()去除右侧,str.strip([chrs])
# chars: 可选参数,默认为空,即删除空格/制表/回车/换行等符号。如果为“#@”,则是删除#或@符号
strstrip = '@#@##hello world@#@#@@@'
print(strstrip.strip('@#'))
# 格式化字符串 这是早期使用的方法,自2.6版本后,推荐使用format()方法
# 1 使用“%”操作符: '%[-][+][0][m][.n]格式化字符'%exp
# - 左对齐,正数前无符号,负数前加负号
# + 右对齐,正数前加正号,负数前加负号
# 0 右对齐,正数前无符号,负数前加负号,用0填充空白(一般与m参数一起使用)
# m 表示占有宽度
# .n 表示小数点后保留位数
# 格式化字符 用于指定类型,如下表
格式化字符
说明
%s
字符串(采用str()显示)
%c
单个字符
%d或%i
十进制整数
%x
十六进制整数
%f或%F
浮点数
%r
字符串(采用repr()显示)
%o
八进制整数
%e
指数(基底写为e)
%E
指数(基底写为E)
%%
字符%
# exp 要转换的项,如果指定的项有多个,需要通过元组的形式进行指定,但不能使用列表。

# 2 使用字符串对象的format()方法:str.format(args)
# str 用于指定字符吕的显示样式(即模板)
# args 用于指定要转换的项,如果有多项,则用冒号进行分隔。

# 创建模板语法:{[index][:[[fill]align][sign][#][width][.precision][type]]}
# index 用于指定要设置格式的对象在参数列表中的索引位置,从0开始,如果省略,则根据值的先后顺序自动分配。
# fill 用于指定空白处填充的字符
# align 用于指定对齐方式(“<”表示左对齐,“>”表示右对齐,“=”只对数字有效,表示右对齐,“^”表示剧中对齐,需要配合width使用
# sign 用于指定有无符号(“+”表示正数加正号,负数加负号;“-”表示正数无符号,负数加负号;“ ”空格表示正数加空格,负数加负号
# # 对于二进制/八进制/十六进制,表示会显示0b/0o/0x前缀,否则不显示前缀
# width 用于指定所占宽度
# .precision 用于指定保留的小数位数
# type 用于指定类型
格式化字符                                 说明
s                                      对字符串类型格式化
d                                          十进制整数
c                      将十进制整数自动转换为对应的Unicode字符
e或E                         转换为科学计数法表示再格式化
g或G                               自动在e和f或E和F中切换
b                          将十进制整数自动转换成二进制表示再格式化
o                          将十进制整数自动转换成八进制表示再格式化
x或X                    将十进制整数自动转换成十六进制表示再格式化
f或F                    转换为浮点数(默认小数点后保留6位)再格式化
%                          显示百分比(默认显示小数点后6位)
 
# 出现多个占位符时,要么全部手动指定索引位置,要么全部自动指定索引位置,不能混用。

# 数值类型有多种显示方式,如下:
import math  # 导入Python的数学模块
print('1251+3950的结果是(以货币形式显示):¥{:,.2f}元'.format(1251+3950))  # 以货币形式显示 ¥5,201.00元
print('{0:.1f}用科学计数法表示:{0:E}'.format(120000.1))  # 用科学计数法表示 1.200001E+05
print('π取5位小数:{:.5f}'.format(math.pi))  # 输出小数点后五位 3.14159
print('{0:d}的16进制结果是:{0:#x}'.format(100))  # 输出十六进制数 0x64
print('天才是由 {:.0%} 的灵感,加上 {:.0%} 的汗水 。'.format(0.01,0.99))  # 输出百分比,并且不带小数 1% 99%
# 字符串的编码转换
# 1 ASCII码 一个字节表示10个数字/大小写字母/其它符号的一个宽度,最多表示256个符号。
# 2 GBK/GB2312 中文编码标准,一个字节表示英文,两个字节表示中文
# 3 UTF-8 国际通用编码,一个字节表英文,三个字节表中文,python3.x默认使用此编码

# 常用的字符串类型分别是str和bytes。
# str表示Unicode字符(ASCII或其它)
# bytes表示二进制数据(包括编码的文本)
# 这两种不能拼接在一起使用。如果把str传输或保存,则需要先把str转换为字节类型。
# bytes类型是带有b前缀的字符串(用单引号或双引号表示),如:b'\xd2\xb0'和b'mr'都是bytes类型的数据。
# str类型和tytes类型可以通过encode()和decode()方法进行转换,这两个方法是互逆的过程。

# 使用encode()方法编码:str.encode([encoding="utf-8"][,errors="strict"])
# str 表示要转换的字符串
# encoding="uft-8" 用于指定进行转码时采用的字符编码,默认为UTF-8,当只有一个参数时可以直接写编码,不用写“encoding=”
# errors="strict" 用于指定错误的处理方式,strict:遇到非法字符抛出异常;ignore:忽略非法字符;repalce:用“?”替换非法字符;xmlcharrefrepalce:用XML的字符引用;等等

# 使用decode()方法解码:格式同编码格式一样,使用时需要与编码时的字符编码一致。
posted @ 2020-08-17 11:53  Zack6688  阅读(228)  评论(0)    收藏  举报