Python字符串详解
一、字符串详解
1、字符串特点
- 字符串创建后不可修改;
- 若要拼接或修改创建好的字符串都会造成重新生成字符串;
- 只能进行加减运算
- 字符串用单引号或双引号引起来,例如:"this is a String" 'this is a String'
2、字符串常用功能
需求描述 | 右列代码的解释 | 实现代码举例 |
判断和转换字符串大小写 |
包含常见字符; | v = "heLlO" x= v.lower() print(x) |
包含常见字符; | v = "heLlO" x= v.islower() print(x) | |
包含常见字符; | v = "heLlO" x= v.upper() print(x) | |
包含常见字符; | v = "heLlO" x= v.isupper() print(x) | |
查找字符串子序列的索引位置 |
从开始往后找,找到第一个就获取其位置,并终止查找; | v = "012312" x = v.find('12') print(x) |
从指定位置找,此功能的前边位置为开区间>=,后边位置为闭区间<; | v = "012312" y = v.find('12',4,6) print(y) | |
字符串拼接 |
a = "你好你好" a = " ".join(a) print(a) |
|
去除左右空格字符和不可见字符 | 备注:若括号内写字符,则移除指定字符,从最多开始匹配; | a = " hello " b = a.strip() print(b) |
去除左空格字符和不可见字符 | 备注:若括号内写字符,则移除指定字符,从最多开始匹配; | a = " hello " b = a.lstrip() print(b) |
去除右空格字符和不可见字符 | 备注:若括号内写字符,则移除指定字符,从最多开始匹配; | a = " hello " b = a.rstrip() print(b) |
分隔信息,指定分隔段数,从左到右 | 备注:指定分隔符不显示 | a = "abcdffodooodxxx" b = a.split("d") print(b) |
分隔信息,指定分隔段数,从右到左 | 备注:指定分隔符不显示 | a = "abcdffodooodxxx" b = a.rsplit("d") print(b) |
字符串的替换 | 代码中的2指只替换前两个匹配字符,如果 不指第三个参数则全替换。 | a = "hallohallohallo" b = a.replace("a","e",2) |
获取字符串中的某一个字符 | a = "hello" b = a[3] print(b) | |
0>=范围<3 -1代表最后一位 -2代表倒数第二位; | a = "hello" b = a[0:3] print(b) | |
Python3中获取的是字符的个数 Python2.7中获取的是字符的字节数 |
Python3中获取的是字符的个数 Python2.7中获取的是字符的字节数 |
a = "hello" b = len(a) print(b) |
检查以什么开头 |
v = "heLlO" y = v.startswith('h') print(y) |
|
检查以什么结尾 |
v = "heLlO" y = v.endswith('O') print(y) |
|
一个个输出字符串的方法 | a为变量名 |
test = "降龙十八掌" for a in test: print(a) |
创建一个范围的数字 |
0>=范围<100 5为设置的步长(默认步长则是连续的), 范围如果从100到0,则步长需要时负数,比如是-1。 注意:Python2.7中一次性创建范围内所有数字;而Python3则做了优化, 只能通过for循环每次创建一个数字; 如果要再Python2中也一个个创建,则需要使用xrange; |
a = range(0,100,5) for iterm in a: print(iterm) |
3、字符串不常用功能
需求描述 | 右列代码的解释 | 实现代码举例 |
首字母大写 | v = "hello" x = v.capitalize() print(x) | |
字母大写变小写 | 包含常见和不常见字符; | v = "heLlO" x = v.casefold() print(x) |
设置宽度并将内容居中 | 20代表内容所占宽度,*位置只能用一个字符,不能是数字,但是可有可无; | v = "Hello" x = v.center(20,"*") print(v) |
计算字符或子序列出现多少次 | L位置要统计的字符或者子序列, 5,6代表要统计的始末位置; | v = "heLlO" x = v.count("L",5,6) print(x) |
查找子序列的位置 | index与find不同的是:find没找到显示-1,index查找不到会报错; | v = "01632" x = v.index('9') print(x) |
用户数据套用模板格式进行输出 | test = "i am {name}",age(a) i = test.format(name="tom",a=19) print(i) | |
test = "i am {0}",age(1) i = test.format("tom",19) print(i) | ||
test = "i am {name}",age(a) i = test.format_map({"name":"tom","a":19}) print(i) | ||
判断字符串中是否只是包含的字母和数字 | test = "123abc" v = test.isalnum() print(v) | |
判断字符串中是否只是包含字母 | test = "123abc" v = test.isalpha() print(v) | |
调整列宽为指定长度,常用语做表格 | \t 制表符 \n 换行符 | test = "123\tabc\tcdd\t\n123\tabc\tcdd\t" v = test.expandtabs(20) print(v) |
判定输入的是否是数字 | 不支持识别特殊格式的数字 | a = "123" x = a.isdecimal() print(x) |
判定输入的是否是数字 | 支持识别特殊格式的数字 | a = "123" x = a.isdigit() print(x) |
判定输入的是否是数字 | 支持识别特殊格式的数字和中文数字 | a = "123" x = a.isnumeric() print(x) |
判断输出的内容是否有不可显示的字符 | a = "123/t" x= a.printable() print(x) | |
判断是否全部都是空格 | a = " " x= a.isspace() print(x) | |
判断是否是标题 | a = "Hello Word" x= a.istitle() print(x) | |
将非标题变成标题 | a = "Hello word" x= a.title() print(x) | |
指定占用宽度并将内容居中 | 20为宽度,"*"为填充字符 | a = "hello" b = a.center(20,"*") print(b) |
指定占用宽度并将内容居左 | 20为宽度,"*"为填充字符 | a = "hello" b = a.ljust(20,"*") print(b) |
指定占用宽度并将内容居右 | 20为宽度,"*"为填充字符 | a = "hello" b = a.rjust(20,"*") print(b) |
规避敏感信息 |
v1 = "不良言论" v2 = "****" v3 = str.maketrans(v1,v2) a = "某人发表的不良言论" b = a.translate(v3) print(b) |
|
分隔信息,只能分隔三段; 从左到右 | 备注:指定分隔符显示 | a = "abcdffodooodxxx" b = a.partition("d") print(b) |
分隔信息,只能分隔三段; 从右到左 | 备注:指定分隔符显示 | a = "abcdffodooodxxx" b = a.rpartition("d") print(b) |
只能根据换行符分隔 | 参数解释:True显示/n,flase不显示换行符 | a = "abcdf/nodoo/nodxxx" b = a.rsplitlines(True) print(b) |
大小写转换 | a = "hello" b = a.swapcase() print(b) |
二、字符串拼接
1、百分号字符串拼接
1)举例:%s 可以接收任何值,%d只可以接收数字
aaa = 'i am %s my hobby is %s' % ('xxx','yyy')
aaa = 'i am %s my hobby is %s' % ('xxx',1)
aaa = 'i am %s my hobby is %s' % ('xxx',[1,2])
name = 'xxx'
age = 33
aaa = 'i am %s my hobby is %d' % (name,age)
说明:%.3s中的.3的意思是 接收的数据长度为3位,不常用,知道即可;
2)举例:%f用来拼接浮点数
tpl = "percent %.2f" % 99.976236666666 #%.2f中的.2代表四舍五入保留小数点后两位长度的小数
tpl = 'percent %.2f %%' % 99.9762366666666 #%% 代表打印%符号
tpl = "i am %(name)s age %(age)d" % {"name": "aaa", "age": 18} #使用字典传值
msg='i am %(name)+60s my hobby is alex' %{'name':'lhf'}
msg='i am \033[43;1m%(name)+60s\033[0m my hobby is alex' %{'name':'lhf'} #拼接内容增加颜色
print('root','x','0','0',sep=':') #用指定符号来为字符串分隔
3)%拼接理论知识
%[(name)][flags][width].[precision]typecode
-
- (name) 可选,用于选择指定的key
- flags 可选,可供选择的值有:
- + 右对齐;正数前加正好,负数前加负号;
- - 左对齐;正数前无符号,负数前加负号;
- 空格 右对齐;正数前加空格,负数前加负号;
- 0 右对齐;正数前无符号,负数前加负号;用0填充空白处
- width 可选,占有宽度
- .precision 可选,小数点后保留的位数
- typecode 必选
- s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置
- r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置
- c,整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
- o,将整数转换成 八 进制表示,并将其格式化到指定位置
- x,将整数转换成十六进制表示,并将其格式化到指定位置
- d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
- e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
- E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
- f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
- F,同上
- g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
- G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
- %,当字符串中存在格式化标志时,需要用 %%表示一个百分号
注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式
2、format字符串拼
1)format拼接常用功能举例
aabbc = "i am {}, age {}, {}".format("six", 18, 'tom')
aabbc = "i am {}, age {}, {}".format(*["six", 18, 'tom'])
aabbc = "i am {0}, age {1}, really {0}".format("six", 18)
aabbc = "i am {0}, age {1}, really {0}".format(*["six", 18])
aabbc = "i am {name}, age {age}, really {name}".format(name="six", age=18)
aabbc = "i am {name}, age {age}, really {name}".format(**{"name": "six", "age": 18})
aabbc = "i am {0[0]}, age {0[1]}, really {0[2]}".format([1, 2, 3], [11, 22, 33])
aabbc = "i am {:s}, age {:d}, money {:f}".format("six", 18, 88888.1)
aabbc = "i am {:s}, age {:d}".format(*["six", 18])
aabbc = "i am {name:s}, age {age:d}".format(name="six", age=18)
aabbc = "i am {name:s}, age {age:d}".format(**{"name": "six", "age": 18})
aabbc = "numbers: {:b},{:o},{:d},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15, 15.87623, 2)
aabbc = "numbers: {0:b},{0:o},{0:d},{0:x},{0:X}, {0:%}".format(15)
aabbc = "numbers: {num:b},{num:o},{num:d},{num:x},{num:X}, {num:%}".format(num=15)
说明:#b代表二进制,o代表8进制,d代表证书,x代表十六进制小写,X代表十六进制大写,%代表转换为百分
2)format理论知识
[[fill]align][sign][#][0][width][,][.precision][type]
- fill 【可选】空白处填充的字符
- align 【可选】对齐方式(需配合width使用)
- <,内容左对齐
- >,内容右对齐(默认)
- =,内容右对齐,将符号放置在填充字符的左侧,且只对数字类型有效。 即使:符号+填充物+数字
- ^,内容居中
- sign 【可选】有无符号数字
- +,正号加正,负号加负;
- -,正号不变,负号加负;
- 空格 ,正号空格,负号加负;
- # 【可选】对于二进制、八进制、十六进制,如果加上#,会显示 0b/0o/0x,否则不显示
- , 【可选】为数字添加分隔符,如:1,000,000
- width 【可选】格式化位所占宽度
- .precision 【可选】小数位保留精度
- type 【可选】格式化类型
- 传入” 字符串类型 “的参数
- s,格式化字符串类型数据
- 空白,未指定类型,则默认是None,同s
- 传入“ 整数类型 ”的参数
- b,将10进制整数自动转换成2进制表示然后格式化
- c,将10进制整数自动转换为其对应的unicode字符
- d,十进制整数
- o,将10进制整数自动转换成8进制表示然后格式化;
- x,将10进制整数自动转换成16进制表示然后格式化(小写x)
- X,将10进制整数自动转换成16进制表示然后格式化(大写X)
- 传入“ 浮点型或小数类型 ”的参数
- e, 转换为科学计数法(小写e)表示,然后格式化;
- E, 转换为科学计数法(大写E)表示,然后格式化;
- f , 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
- F, 转换为浮点型(默认小数点后保留6位)表示,然后格式化;
- g, 自动在e和f中切换
- G, 自动在E和F中切换
- %,显示百分比(默认显示小数点后6位)
- 传入” 字符串类型 “的参数