python基础第四节:基础数据类型之字符串用法大全

4.1 python中字符串的定义

字符串是python中最常见、常用的数据类型。 在Python程序中,我们把单个或多个字符用单引号''或者双引号""包裹起来,就可以表示一个字符串,也可以用三个单引号或者双引号进行折行。字符串的字符可以是特殊符号、英文字母、中文字符、日文的平假名或片假名、希腊字母、Emoji字符等等。

4.1.1 字符串的主要用处:

  • 字符串一般用于向用户展示信息。在正常的桌面应用和web应用中,一般都是将数据加工成字符串然后展示给用户,另外网络之间传递的json格式的数据也是字符串。当我们用python从word或者txt文件中读或者写数据时读出的数据都是字符串。所以学好字符串对于后面学习办公自动化非常重要。

4.1.2 定义字符串的方法:

直接用单引号或双引号包裹(如果是多行的字符串,用三个单引号或者三个双引号包裹):

s1 = "字符串"
s2 = '字符串'
s3 = '''
窗前明月光,
疑是地上霜。
'''
print(s1 is s2) # True,s1和s2表示的是同一的值

4.1.3 字符串的转义符

定义:转义字符是指用普通字符的组合来代替特殊字符,其组合改变了原来字符表示的含义
python中常用的转义字符

转义符含义
\在行尾出现时为续行符;
\反斜杠符号;
\’单引号;
\”双引号;
\a响铃;
\b退格;
\e转义;
\000空;
\n换行;
\v纵向制表符;
\t横向制表符;
\r回车;
\f换页;
\oyy八进制数yy代表的字符;
\xyy十进制数yy代表的字符;

4.2 字符串的用法

4.2.1 字符串的公共用法

  • 判断数据类型:判断变量是否为字符串使用type()方法
s1 = "字符串"
print(type(s1))   # 运行结果:<class 'str'>
  • 查看字符长度:len() 方法获取字符串的长度,即字符串中含有多少个字符。
s1 = "字符串"
print(len(s1)) # 运行结果:3
  • 查看字符串中最大值与最小值:max()min()
s1 = "字符串"
print(max(s1, min(s1)))  #  运行结果:符 串

python 中字符串每个字符是通过Unicode编码的,比较每个字符的大小通过比较字符的Unicode码进行比较,两个字符串比较大小首先比较第一个字符的大小,第一个大的,字符串就大,如果第一个字符一样大,则继续比较第二个字符,依次类推。

4.2.2 字符串的索引与切片。

  • 字符串的索引
    我们可以通过len()方法确定字符串中有几个字符,也就可以通过索引来获取字符串中制定的字符。
    在这里插入图片描述
    在这里插入图片描述

4.2.3 字符串的内置函数

内置函数是字符串自带的函数,此类函数的调用方式为`string.函数名(参数)

4.2.3.1 字符串元素定位类函数

函数用途详细说明
string.find(str, beg=0, end=len(string))检测string中是否包含字符串str如果包含所检测的字符串则返回str中第一个字符在string中第一次出现时的索引,否则返回-1。可以通过添加第二个参数和第三个参数设置搜索范围。 其中第二个参数格式为数字,即从该索引处开始查找,第三个参数格式为数字,表示搜索至该索引处结束
string.index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.rfind(str, beg=0,end=len(string) )类似于 find() 函数,返回字符串最后一次出现的位置,如果没有匹配项则返回 -1。
string.rindex( str, beg=0,end=len(string))类似于 index(),不过是返回最后一个匹配到的子字符串的索引号。
string.count(str, beg=0, end=len(string))返回 str 在 string 里面出现的次数如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
  ## 字符串中元素的定位
s1 = '月落乌啼霜满天, 江枫渔火对愁眠。姑苏城外寒山寺,夜半钟声到客船。'
s2 = """The moon sets and the crow cries in the frosty sky, 
     the river maple and the fisherman's fire sleep with sorrow outside Gusu City,  
     the sound of the midnight bell arrives at the passenger boat."""

 ## find()和rfind()用法: find()返回第一个的索引,rfind()返回最后一个的索引。如果到不到,返回-1.
res_find = s2.find('cr')
res_find_2 = s2.rfind('cr')
res_find_3 = s2.find('rivers')
print(f'res_find:{res_find}, res_find_2:{res_find_2}, res_find_3:{res_find_3}')
 ## index()和rindex()用法与find()和rfind()相同,唯一的不同点在于,找不到时会报错

res_index = s2.index('cr')
res_index_2 = s2.rindex('cr')
print(f'res_index:{res_index}, res_index_2:{res_index_2}')
try:
    res_index_3 = s2.index('rivers')
    print(res_index_3)
except Exception as ex:
    print(f'报错信息: {ex}')
res_count = s2.count('cr')
print(res_count)
  #### 执行结果:
   '''
  res_find:22, res_find_2:27, res_find_3:-1
  res_index:22, res_index_2:27
  报错信息: substring not found
  2
  '''

4.2.3.2 字符串中处理大小写的函数

函数用途
string.upper()转换 string 中的小写字母为大写
string.lower()转换 string 中所有大写字符为小写.
string.capitalize()把字符串的第一个字符大写
string.swapcase()翻转 string 中的大小写
string.title()将字符串中每个单词的首字母大写
string.istitle()将判断字符串中的字符是否符合string.title()格式

**注意:**以上方法并不会对源字符串string进行修改而是生成新的字符串,需要使用变量去接收新的字符串。

s2 = """The moon sets and the crow cries in the frosty sky, 
     the river maple and the fisherman's fire sleep with sorrow outside Gusu City,  
     the sound of the midnight bell arrives at the passenger boat."""
  ## 将所有字符变成大写
s2_upper = s2.upper()
  # 将所有字符变成小写
s2_lower = s2.lower()
  # 将字符串内容标题化
s2_title = s2.title()
  # 反转字符串的大小写
s2_swap = s2.swapcase()
  # 将字符串第一个字符大写
s2_cap = s2.capitalize()
print(f'''
s2_upper:{s2_upper}\n 
s2_lower:{s2_lower}\n 
s2_title:{s2_title}\n 
s2_swap:{s2_swap}\n 
s2_cap:{s2_cap}''')

4.2.3.3 字符串内容识别类函数

函数用途
string.startswith(prefix, start=None, end=None)检查字符串是否是以 prefix开头,是则返回 True,否则返回 False。如果start 和 end 指定值,则在指定范围内检查.
string.endswith(prefix, start=None, end=None)检查字符串是否以prefix结束,如果beg 或者 end 指定则检查指定的范围内检查,如果是,返回 True,否则返回 False.
string.isalnum()检查字符串中是否所有字符都为字母或数字,如果时返回 True,否则返回 False
string.isalpha()检查字符串中是否所有字符都是字母,如果是则返回 True,否则返回 False
string.isdecimal()检查字符串中是否只包含十进制数字,如果是返回 True 否则返回 False.
string.isdigit()检查字符串中是否只包含正整数,是则返回 True 否则返回 False.
string.islower()检查字符串中是否所有区分大小写的字符都是小写,如果是则返回 True,否则返回 False,如果不存在区分大小写的字符同样返回False,
string.isnumeric()如果 string 中只包含数字字符,则返回 True,否则返回 False【与isdigit()相同】
string.isspace()如果 string 中只包含空格,则返回 True,否则返回 False.【注意】:空字符串不含空格,所以空字符串返回的也是False
string.istitle()如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

4.2.3.4 字符串内容修改类函数

函数用途
string.replace(__old, __new, __count)用新字符串 替换替换字符串中的旧字符,如果 指定count,则替换不超过 count次.
string.lstrip()截掉 string 左边的空格
string.rstrip()删除 string 字符串末尾的空格.
string.strip()在 string 上执行 lstrip()和 rstrip(),默认删除空格,如果指定字符串,则删除指定的字符串
string.expandtabs(tabsize=8)把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
  ##  字符串中内容的修改
  ###  string.replace(__old, __new, __count)用新字符串 替换替换字符串中的旧字符,如果 指定count,则替换不超过 count次.
s1 = '清明时节雨纷纷,清明时节雨纷纷,清明时节雨纷纷,'
s2 = s1.replace('清明','qingming',2)
s3 = s1.replace('清明','qingming',4)
print(f's1:{s1}')
print(f's2:{s2}')
print(f's3:{s3}')
 ### replace方法不会对原变量进行修改,会生成一个新的字符串,需要用一个变量去接收这个字符串才可以使用。

###  string.strip()	删除string左右两端的空格,如果指定字符串,则删除指定的字符串
 ###  srting.lsrtip()只删除左边的空格或指定字符,rstrip()只删除右边空格或字符
s4 = "   清明时节雨纷纷,路上行人欲断魂。   "
s5 = s4.strip()
s6 = s4.strip("   清")
s7 = s4.lstrip()
s8 = s4.rstrip()
s9 = s4.strip("雨")
print(f's5:{s5}--')
print(f's6:{s6}--')
print(f's7:{s7}--')
print(f's8:{s8}--')
print(f's9:{s9}--')
 ## strip()系列的函数只能对字符串开头的字符进行操作,不会处理字符串中间的字符,如果需要对中间字符进行操作使用replace()
 ## strip()同样生产新字符串,需要用变量接收

##string.expandtabs(tabsize=8)	把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
s10 = '清明时节雨纷纷,\t路上行人欲断魂。'
s11 = s10.expandtabs()
s12 = s10.replace(" ", "1")
s13 = s11.replace(" ", "1")
s14 = s10.expandtabs(tabsize=4)
print(f's10:{s10}')
print(f's11:{s11}')
print(f's12:{s12}')
print(f's13:{s13}')
print(f's14:{s14}')
 ## 字符串中使用\t 表示制表符tab  expandtabs()默认将'\t'转换为8个,通过tabsize参数调整空格数量 

执行结果

D:\PythonWorkPath\EMenv\Scripts\python.exe D:\PythonWorkPath\ExcelManage\text.py 
s1:清明时节雨纷纷,清明时节雨纷纷,清明时节雨纷纷,
s2:qingming时节雨纷纷,qingming时节雨纷纷,清明时节雨纷纷,
s3:qingming时节雨纷纷,qingming时节雨纷纷,qingming时节雨纷纷,
s5:清明时节雨纷纷,路上行人欲断魂。--
s6:明时节雨纷纷,路上行人欲断魂。--
s7:清明时节雨纷纷,路上行人欲断魂。   --
s8:   清明时节雨纷纷,路上行人欲断魂。--
s9:   清明时节雨纷纷,路上行人欲断魂。   --
s10:清明时节雨纷纷,	路上行人欲断魂。
s11:清明时节雨纷纷,        路上行人欲断魂。
s12:清明时节雨纷纷,	路上行人欲断魂。
s13:清明时节雨纷纷,11111111路上行人欲断魂。
s14:清明时节雨纷纷,    路上行人欲断魂。

进程已结束,退出代码0

4.2.3.5 字符串对齐类函数

函数用途
string.zfill(width)返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0
string.center(width)返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
## 为了使输出的字符串更加美观并且符合某些固定格式的要求,python字符串中内置了可以实现字符串对齐的方法
### zfill(),用左边的零来填充一个数字字符串,以填补一个给定宽度的字段,原字符串不会被截断。
## center(),将字符串两边用指定字符(默认为空格)进行填充,返回指定长度的字符串
s1 = "1235221"
s2 = s1.zfill(15)
s3 = s1.center(15)
s4 = s1.center(15,'-')
print(f's1:{s1}')
print(f's2:{s2}')
print(f's3:{s3}')
print(f's4:{s4}')
 ###  执行结果
s1:1235221
s2:000000001235221
s3:    1235221    
s4:----1235221----

4.2.3.6 字符串分割函数

函数用途
string.split()以指定字符(默认为空格)为分隔符切片 string,如果指定分割数量,则从左侧开始分割,分隔至 num+1 个子字符串终止
string.rsplit()以指定字符(默认为空格)为分隔符切片 string,如果指定分割数量,则从右侧开始分割,分隔至 num+1 个子字符串终止
string.splitlines()按照行(‘\r’, ‘\r\n’, ‘\n’)分隔,返回一个包含各行作为元素的列表。
s1 = 'qing ming \nshi jie'
s2 = s1.split()
s3 = s1.splitlines()
s4 = s1.split('\n')
s5 = s1.rsplit(" ",2)
print(f's1:{s1}')
print(f's2:{s2}')
print(f's3:{s3}')
print(f's4:{s4}')
print(f's4:{s5}')
  ## 执行结果
s1:qing ming 
shi jie
s2:['qing', 'ming', 'shi', 'jie']
s3:['qing ming ', 'shi jie']
s4:['qing ming ', 'shi jie']
s4:['qing ming', '\nshi', 'jie']

4.3 字符串的格式化输出

4.3.1 占位符%

python 中可以使用%做占位符,将变量名指向的数据传到字符串中,实现字符串的动态变化.
python中常见的站位符如下

占位符含义
%s任意字符
%d任意整数
%u无符号整数
%f浮点数
## python中占位符%的用法
##  %s 字符串占位符
## 占位一次与多次占位
name = '三尺龙泉'
age = 18
score = 95.556652854
 ## 占位一次
print('我是:%s'% name)
 # 占位两次及以上,待填入变量需要用()包裹,不同变量之间用逗号间隔,且按照先后顺序。
print('我是:%s,今年%s岁'% (name, age))
 ## %d 占位任意整数,如果传入的是小数,自动取整
print('我是:%s,今年%d岁, 我考试考了%d分'% (name, age, score))
 ## %f 占位浮点数,默认保留6位小数位,支持四舍五入
print('我是:%s,今年%d岁, 我考试考了%f分'% (name, age, score))
 ## 设置浮点数小数点位数格式在%和f中间用.后面加数字表示小数点位数
print('我是:%s,今年%d岁, 我考试考了%.3f分'% (name, age, score))
##执行结果
我是三尺龙泉
我是三尺龙泉,今年18岁
我是三尺龙泉,今年18, 我考试考了95分
我是三尺龙泉,今年18, 我考试考了95.556653分
我是三尺龙泉,今年18, 我考试考了95.557

4.3.2 string.format()方法

format()是字符串的内置方法,在用法上类似占位符,但是比占位符更加灵活多样。主要用法如下:

4.3.2.1 format()的使用

## format()的用法
## 用法一:按位置传参,用法类似%占位符
name = '三尺龙泉'
age = 18
score = 95.556652854
print('我是{},我今年{}岁'.format(name, age))
## 用法二:使用索引传参
print('我是{0},我今年{1}岁'.format(name, age))
print('我是{1},我今年{0}岁'.format(name, age))
## 用法三:关键字传参
print('我是{name},我今年{age}岁'.format(name='三尺龙泉', age=18))
## 用法四:字典传参,使用** 解析字典内容
kwargs= {"name": "三尺龙泉", "age": 18}
print('我是{name},我今年{age}岁'.format(**kwargs))
执行结果:
我是三尺龙泉,我今年18岁
我是三尺龙泉,我今年18岁
我是18,我今年三尺龙泉岁
我是三尺龙泉,我今年18岁
我是三尺龙泉,我今年18

4.3.2.2 format()的格式化

填充数据的格式化操作在{}内设置。具体格式为填充字符+对齐方式+字符宽度
对齐方式如下:

 ## format格式化输出
 ## 第一步取值,:
 ##第二步加填充符,默认为空格,填充符前面需要加冒号
 ##第三步确定对齐方式: <: 左对齐,>:右对齐。^:居中对齐。
 ##第四步确定格式化字符串的位数。当输入字符的位数超过格式化位数时,会原样输出改字符
name = '三尺龙泉'
age = 18
score = 95.5525660221445
print('我是:{:*<10},\n我今年{:*>10}岁。\n我考了{:*^10}分'.format(name, age,score))
##输出结果:
我是:三尺龙泉******,
我今年********18岁。
我考了95.5525660221445

4.3.2.3 format()的精确度设置

format()方法设置数字精确度的方法与%占位符方法相似

score = 95.2544635464
print("{}".format(score))
# 调整精确度为3位小数
print("{:.3f}".format(score))
# 调整精度与对齐格式结合使用时,先设置对齐后调精确的
print("{:-^10.3f}".format(score))
## 执行结果
95.2544635464
95.254
--95.254--

在这里插入图片描述

4.3.2.4 使用format进行不同进制之间的转换

##format()方法还支持不同进制数字之间的转换
s = 12253
 ## 转换成16进制
print("{:x}".format(s))
 ## 转换8进制
print("{:o}".format(s))
##转换二进制
print("{:b}".format(s))
 ## 转换位千分位格式
print("{:,}".format(1233321546))
 ## 执行结果
 2fdd
27735
10111111011101
1,233,321,546

4.3.3 f-strings方法

f-strings方法是从python3.6开始加入的语法,称为字面量格式化字符串。主要语法格式为:以F或者f开头,后面跟字符串,字符串中用{}将变量或表达式包起来,并将变量或表达式计算后的值替换进去。

## f-strings 用法
## 嵌套变量
name = '三尺龙泉'
age = 18
print(f'我是:{name},我今年{age}岁')
## 嵌套表达式
score = 80
print(f'我的考试成绩{"合格" if score >= 60 else "不合格"}')
a, b = 10, 20
print(f'a+b={a+b}')
## 嵌套函数调用
def sum():
    return a+b
print(f'a+b = {sum()}')
## 执行结果
我是:三尺龙泉,我今年18岁
我的考试成绩合格
a+b=30
a+b = 30
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值