首页 > 代码库 > 06-字符串类型*****

06-字符串类型*****

字符串类型(不可变类型)
‘hello‘,‘world‘
转换方法:str()
-整个字串被当作一个序列,可通过索引来引用某一个元素

-转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\;
-如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r‘‘表示‘‘内部的字符串默认不转义

查看一个变量类型
type(a), id(a)

可使用参数
总结:
str.join()
str.upper()
str.lower()
str.split()
str.find()
str.strip()
‘str‘.join()
str.format()
str.startswith()
str.replace()


-创建
a = ‘jack‘
b = str(a)
print(b)
print(type(b))

-转换
a = ‘123‘
b = str(a)
print(b)
print(type(b))

运行结果:
<class ‘str‘>

-拼接
a = ‘name‘
b = ‘jack‘
c = a + b
print(c)

运行结果:
name jack

-格式化(占位符)
mes = ‘My name is %s, today is %s years old, gender is %s.‘ % (‘jack‘, 25, ‘man‘)
print(mes)

运行结果:
My name is jack, today is 25 years old, gender is man.
%c : ASCII
%s : 字符串
%d : 整数
%u : 无符号整型
%o : 无符号八进制数
%x : 无符号十六进制数
%X : 无符号十六进制数(大写)
%f : 浮点数字
%e : 科学计数法格式化浮点数
%g : %f 和 %e 的简写
%p : 用十六进制数格式化变量的地址


可操作的方法:
-移除空白,包括\n,\t,还有自定义移除
val.strip() :移除所有
val.lstrip() :移除左边
val.rstrip() :移除右边
a = ‘jack ‘
a_new = a.strip()
print(a)
print(a_new)

-分割且不保留分隔符
val.split()
a = ‘user1sbuser2‘
v = a.split(‘sb‘)
print(v)
运行结果:
[‘user1‘, ‘user2‘]

-分割且保留分隔符
.partition(‘string‘)
a = ‘user1sbuser2‘
v = a.partition(‘sb‘)
print(v)
运行结果:
(‘user1‘, ‘sb‘, ‘user2‘)


-长度
val.len()
val = "jack,25,man"
val_new = len(val)
print(val)
print(val_new)
运行结果:
jack,25,man
11

-索引
val[0]
val = "jack,25,man"
val_new = val.split(‘,‘)
val_new1 = val_new[0]
print(val)
print(val_new)
print(val_new1)

运行结果:
jack,25,man
[‘jack‘, ‘25‘, ‘man‘]
jack

-切片
val[index1:index2:walk]
val = "我叫jack,今年25岁了,是个man."
print(val[0])
print(val[0:5])
print(val[7:])
print(val[7:-2])

运行结果:

我叫jac
今年25岁了,是个man
今年25岁了,是个m

-填充
name = ‘alex‘
v1 = name.ljust(20, ‘*‘)
v2 = name.rjust(20, ‘*‘)
v3 = name.center(20, ‘*‘)
print(v1, v2, v3)
运行结果:
alex****************
****************alex
********alex********

-首字母大写
capitalize
name = ‘alex‘
v = name.capitalize()
print(v)
输出结果:
Alex

-忽略大写,转换所有字母为小写
casefold(英文和德文), lower(仅对英文转换)
name = ‘XiaoFei‘
v1 = name.casefold()
v2 = name.lower()
print(v1)
print(v2)
输出结果:
xiaofei
xiaofei

-转换所有字母为大写
.upper()
a = ‘alex‘
b = ‘ALex‘
v1 = a.upper()
v2 = b.upper()
print(v1)
print(v2)
输出结果:
ALEX
ALEX

-大小写换转,遇到小写变大写,大写变小写
.swapcase
a = ‘aaaBBBcccDDD‘
v = a.swapcase()
print(v)
运行结果:
AAAbbbCCCddd


-判断是否全小写
.islower()
a = ‘alex‘
b = ‘AlEx‘
v1 = a.islower()
v2 = b.islower()
print(v1, v2)
运行结果:
True False

-判断是否全大写
.isupper()
a = ‘alex‘
b = ‘ALEX‘
v1 = a.isupper()
v2 = b.isupper()
print(v1, v2)


-文本居中,定义长度,填充
center(参数1, 参数2)
参数1:表示总长度(包含字符串本身的长度)
参数2:表示空白处填充的字符
name = ‘xiaofei‘
v = name.center(20, ‘*‘)
print(v)
输出结果:
******xiaofei*******

-左对齐,右对齐,且定义长度,用户指定字符填充
.ljust(weight, ‘string‘)
.rjust(weight, ‘string‘)
a = ‘alex‘
v1 = a.ljust(20, ‘*‘)
v2 = a.rjust(20, ‘*‘)
print(v1)
print(v2)
运行结果:
alex****************
****************alex


-统计,计数
count(参数1, 参数2, 参数3)
参数1:要查找的子值
参数2:起始位置(索引)
参数3:结束位置(索引)
name = ‘aaaaa121dfdfqqqweeeedfdf45555qqq‘
v1 = name.count(‘a‘)
print(v1)
v2 = name.count(‘df‘)
print(v2)
v3 = name.count(‘df‘, 0, 15)
print(v3)
输出结果:
5 #统计name变量中,包含多少个‘a’
4 #统计name变量中,包含多少个‘df’
2 #统计name变量中,从第0个元素到第15个元素之间,包含多少个字符串‘df’

-是否以XX结尾
endwith(‘string‘)
name = ‘alex‘
v = name.endswith(‘ex‘)
print(v)
运行结果:
True

-是否以XX开头
startwith(‘string‘)
name = ‘alex‘
v = name.startswith(‘al‘)
print(v)
输出结果:
True

-以制表符\t为分隔符,填充替换为指定长度
expandtabs(weight)
name = ‘name\tage\tgender\nalex\t25\tman‘
v = name.expandtabs(20)
print(v)
运行结果:
name age gender
alex 25 man

-查找关键字的索引位置,不存在则返回-1而不会报错
find(‘string‘)
---与index()不同,index如果查找的关键字不存在,则会报错
name = ‘alex‘
v = name.find(‘e‘)
print(v)
v1 = name.find(‘o‘)
print(v1)
运行结果:
2
-1


-字符串格式化
.format(‘str1‘, ‘str2‘, ‘str3‘)
a = ‘name:{0}, age:{1}, gender:{2}.‘
v = a.format(‘alex‘, 25, ‘man‘)

a = ‘name:{name}, age:{age}, gender:{gender}.‘
v = a.format(name=‘alex‘, age=25, gender=‘man‘)
运行结果:
name:alex, age:25, gender:man.

-字符串格式化
.format_map({字典})
a = "我是:{name};年龄:{age};性别:{gender}"
v = a.format_map({‘name‘:"李杰",‘age‘:19,‘gender‘:‘中‘})
print(v)
运行结果:
我是:李杰;年龄:19;性别:中

-判断是否是数字、字母、汉字,特殊符号不行
.isalnum()
a = ‘123aa‘
b = ‘你好‘
v1 = a.isalnum()
v2 = b.isalnum()
print(v1)
print(v2)
运行结果:
True
True

-判断是否包含数字,包含则False
.isalpha()
a = ‘alex‘
b = ‘alex123‘
v = a.isalpha()
v1 = b.isalpha()
print(v)
print(v1)
运行结果:
True
False

-判断是否是数字,用于判断是否可以转换为数字类型
.isdecimal() #‘1‘
.isdigit() #‘1‘,‘①‘
.isnumeric() #‘1‘,‘①‘,‘一‘
a = ‘1‘
b = ‘1①‘
c = ‘1①一‘
v1 = a.isdecimal()
v2 = a.isdigit()
v3 = a.isnumeric()
v4 = b.isdecimal()
v5 = b.isdigit()
v6 = b.isnumeric()
v7 = c.isdecimal()
v8 = c.isdigit()
v9 = c.isnumeric()
print(v1, v2, v3, v4, v5, v6, v7, v8, v9)
运行结果:
True True True False True True False False True

-判断变量的值是否允许作为标识符,即是否允许作为变量名,注意,不能识别关键字类型
.isidentifier()
a = ‘name‘
b = ‘1name‘
c = ‘class‘
v1 = a.isidentifier()
v2 = b.isidentifier()
v3 = c.isidentifier()
print(v1, v2, v3)

运行结果:
True False True

-判断是否全部是空格
.isspace()
a = ‘nam e‘
b = ‘ ‘
v1 = a.isspace()
v2 = b.isspace()
print(v1, v2)
运行结果:
False True

-判断是否是标题格式,即只要包含英文单词,其首字母均大写
.istitle()
a = ‘aaa, bbb, ccc‘
b = ‘Aaa, Bbb, Ccc‘
v = a.istitle()
v2 = b.istitle()
print(v)
print(v2)
运行结果:
False
True

-全部变成标题格式,首字母全部变成大写
.title()
a = ‘aaa, bbb, ccc‘
v = a.title()
print(v)
运行结果:
Aaa, Bbb, Ccc

 

-对元素通过自定义的字符来循环分割(需要能被循环且元素中不能有数字)
‘string‘.join()
a = ‘alex‘
v = ‘_‘.join(a)
print(v)
运行结果:
a_l_e_x
##############################
a = [‘你‘, ‘我‘, ‘他‘]
v = ‘好‘.join(a)
print(v)
运行结果:
你好我好他

-对应关系替换,翻译
a.maketrans(‘key‘, ‘val‘)
.translate(a)
m = str.maketrans(‘abcde‘, ‘12345‘)
name = ‘siodfuioweurflkdsjflkadsjlfxc,q‘
v = name.translate(m)
print(v)
运行结果:
sio4fuiow5urflk4sjflk14sjlfx3,q

-替换,将旧的值替换为新的值,n表示从左往右替换几次
.replace(‘old’‘, ‘new‘, n)
a = ‘张三SB李四SB王五SB陈六‘
v = a.replace(‘SB‘, ‘md‘, 2)
print(v)
运行结果:
张三md李四md王五SB陈六

-转换成字节形式
.encode(encoding=‘utf-8‘)
name = ‘理解‘
v1 = name.encode(encoding=‘utf-8‘)
v2 = name.encode(encoding=‘gbk‘)
运行结果:
b‘\xe7\x90\x86\xe8\xa7\xa3‘
b‘\xc0\xed\xbd\xe2‘

06-字符串类型*****