前言:
本文章供python初学者自学学习,以后的话应该会每周末更新一次,因为本人也是在自学python,所以想借此来分享一波笔记。喜欢的话可以关注一下。
正文:
今天这一章还是比较重要的一节,不过并不难,很多内容上起手来还是比较简单的。我们这一节说一下字符串的常用操作。
1.拼接字符串
使用 “+” 运算符可以完成多个字符串的拼接,但是要连接的必须是字符串和字符串类型的。不可以是字符串和其它类型。
例如:
str1="我已经有了"
num=133
str2="个粉丝"
print(str1+str(num)+str2)
运行结果如下:
这个num必须强制转换成为字符串类型才可以使用 “+” 运算符。
2.计算字符串长度
len = (string) #string表示要统计的字符串
len 可以将字符串的所有字符个数统计出来。
示例:
str1 = "张子枫最新电影《秘密访客》"
print(len(str1))
运行结果如下:
另外:数字、英文、小数点、空格、下划线、占用1个字节,一个汉字在采用不同编码时所占用字节数不同。汉字在采用GBK/GB2312编码中占用2个字节、在采用UTF-8/Unicode中一般占用3个字节。我们默认采用UTF-8编码。有时候我们需要计算字符串的字节数(类似c语言的sizeof)我们采用encode()
示例:
str1 = "张子枫最新电影《秘密访客》"
print(len(str1.encode()))
print(len(str1.encode('gbk')))
运行结果如下:
第一个39是采用UTF-8编码,第二个采用是GBK编码,两种编码方式还是有很大的差距的。
3.截取字符串
这个和序列切片完全类似,因为字符串属于序列。
格式:
string[start : end : step]
参数 | 含义 |
string | 表示序列名称。 |
start | 切片开始位置(包括开始位置)可以省略,省略默认为0; |
end | 切片结束位置(不包括结束位置)可以省略,省略默认为序列长度; |
step | 表示切片步长,省略默认为 1 |
示例:
str1 = "张子枫最新电影《秘密访客》"
print(str1[1])
print(str1[3:])
print(str1[:3])
print(str1[1:7])
运行结果如下:
在字符串截取时,如果指定索引不存在,则会抛出异常,可以采用try…except语句捕获异常,这个后面还会说,先暂时看一下代码。应该可以看懂。
示例:
str1 = "张子枫最新电影《秘密访客》"
try:
substr1 = str1[32]
except IndexError:
print("指定的字符串不存在")
运行结果如下:
4.分割字符串
把一个字符串按照指定的分隔符来分割成字符串列表,该列表中不包括分隔符。
格式:
str.split(sep,maxsplit)
参数 | 含义 |
str | 要分割字符串名称 |
sep | 用于指定分隔符,可以包含多个字符,默认为None,即所有空字符,包括空格、\n、\t |
maxsplit | 指定分割次数,如果不指定或者指定-1则分割字符次数没有限制。(如果不指定sep那么也不能指定maxsplit) |
返回值 | 分割后字符串列表 |
示例:
str1="张子枫最新电影 《秘密访客》"
list1 = str1.split()
print(list1)
5.检索字符串
(1)count()
之前在对列表进行统计计算时用到过count()现在字符串和列表类似,本身字符串也属于列表。功能是检索字符串在原字符串出现次数。
str.count(sub[, start[, end]])
参数 | 含义 |
str | 表示原来字符串 |
sub | 要检索的子字符串 |
start | 可选参数,要检索范围的起始位置,如果不指定,则从头开始 |
end | 可选参数,要检索范围的结尾位置,如果不指定,则从一直到结尾 |
示例:
str1="张子枫发微博称张子枫喜欢张子枫" #随口编的
print("字符串中一共出现",str1.count("张子枫"),"个张子枫")
运行结果如下:
(2)find()
功能:检索是否包含指定的子字符串,如果检索字符串不存在,则返回-1,否则返回首次出现的该子字符串的索引。
str.find(sub[, start[, end]])
参数 | 含义 |
str | 表示原来字符串 |
sub | 要检索的子字符串 |
start | 可选参数,要检索范围的起始位置,如果不指定,则从头开始 |
end | 可选参数,要检索范围的结尾位置,如果不指定,则从一直到结尾 |
示例:
str1="张子枫发微博称张子枫喜欢张子枫"
print("字符串中首次出现张子枫的位置是:",str1.find("张子枫"))
python中还提供了 rfind() 与find类似只不过是从右边开始查找的
(3)index()
index与fing类似,只不过当指定字符串不存在时,会抛出异常。
str.index(sub[, start[, end]])
参数 | 含义 |
str | 表示原来字符串 |
sub | 要检索的子字符串 |
start | 可选参数,要检索范围的起始位置,如果不指定,则从头开始 |
end | 可选参数,要检索范围的结尾位置,如果不指定,则从一直到结尾 |
示例:
str1="张子枫发微博称张子枫喜欢张子枫"
print("字符串中首次出现张子枫的位置是:",str1.index("张子枫"))
运行结果如下:
python中还提供了 rindex() 与index类似只不过是从右边开始查找的。
和find差不多,,,,
(4)startswith()
功能:检索字符串是否以指定子字符串开头,如果是返回True否则返回False
str.startswith(prefix[, start[, end]])
参数 | 含义 |
str | 表示原来字符串 |
prefix | 要检索的子字符串 |
start | 可选参数,要检索范围的起始位置,如果不指定,则从头开始 |
end | 可选参数,要检索范围的结尾位置,如果不指定,则从一直到结尾 |
示例:
str1="张子枫发微博称张子枫喜欢张子枫"
print("字符串是否以张子枫开头:",str1.startswith("张子枫"))
运行结果如下:
(5)endswith()
功能:判断字符串是否以指定的子字符串结尾,返回值依旧是布尔类型。
str.endswith(suffix[, start[, end]])
参数 | 含义 |
str | 表示原来字符串 |
suffix | 要检索的子字符串 |
start | 可选参数,要检索范围的起始位置,如果不指定,则从头开始 |
end | 可选参数,要检索范围的结尾位置,如果不指定,则从一直到结尾 |
示例:
str1="张子枫发微博称张子枫喜欢张子枫"
print("字符串是否以张子枫结尾:",str1.endswith("张子枫"))
运行结果如下:
6.字母大小写转换
(1)lower()
功能:大写字母转换小写字母,如果没有可以被转换的字符,就返回原来字符串,否则就返回新字符串。
str.lower()
示例:
str1="CREDIT card"
print("原字符串:",str1)
print("新字符串:",str1.lower())
运行结果如下:
(2)upper()
功能:小写字母转换成大写字母
str.upper()
示例:
str1="CREDIT card"
print("原字符串:",str1)
print("新字符串:",str1.upper())
运行结果如下:
7.除去字符串中的空格和特殊字符
特殊字符:制表符、回车符、换行符等等
(1)strip()
功能:用于除去字符串左右两侧的空格或者特殊字符
str.strip([chars])
参数 | 含义 |
str | 表示要处理的字符串 |
chars | 可选参数,用于指定要除去的字符,如果不指定,则默认空格和特殊字符 |
示例
str1=" @CREDIT card "
print("原字符串",str1)
print("新字符串",str1.strip())
print("新字符串",str1.strip(" @"))
运行结果如下:
(2)lstrip()
功能:用于除去字符串左侧的空格或者特殊字符
str.lstrip([chars])
参数 | 含义 |
str | 表示要处理的字符串 |
chars | 可选参数,用于指定要除去的字符,如果不指定,则默认空格和特殊字符 |
示例:
str1=" @CREDIT card @"
print("原字符串",str1)
print("新字符串",str1.lstrip())
print("新字符串",str1.lstrip(" @"))
运行结果如下:
(3)rstrip()
功能:用于除去字符串左侧的空格或者特殊字符
str.rstrip([chars])
参数 | 含义 |
str | 表示要处理的字符串 |
chars | 可选参数,用于指定要除去的字符,如果不指定,则默认空格和特殊字符 |
示例:
str1=" @CREDIT card @"
print("原字符串",str1)
print("新字符串",str1.rstrip())
print("新字符串",str1.rstrip(" @"))
运行结果如下:
这三个都很类似,只不过是删除位置不同。
8.格式化字符串
这个有点像c语言的输入输出控制格式的那个( printf(“a=%4d”,a) 类似这个,看不懂可以忽略。)
(1)使用%操作符
'%[-][+][0][m][.n]格式化字符'%exp
参数 | 含义 |
- | 可选参数,用于指定左对齐,正数前方无符号,负数前方加负号 |
+ | 可选参数,用于指定右对齐,正数前方加正号,负数前方加负号 |
0 | 可选参数,表示右对齐,正数前方无符号,负数前方加负号,用0填充空白处(一般与m参数一起使用) |
m | 可选参数,表示占用宽度 |
.n | 可选参数,表示小数点后保留几位 |
格式化字符 | 用于指定类型 |
exp | 要转换的项,如果指定的项有多个,需要通过元组的形式来指定但不可以用列表 |
格式化字符 | 含义 | 格式化字符 | 含义 |
%s | 字符串类型(采用 str() 显示) | %r | 字符串类型(采用 repr() 显示) |
%c | 单个字符 | %o | 八进制整数 |
%d(%i) | 十进制整数 | %x | 十六进制整数 |
%e | 指数(基底为e) | %E | 指数(基底为E) |
%f(%F) | 浮点数 | %% | 字符% |
示例:
template = '编号:%09d\t公司名称:%s\t官网:http://www.%s.com'
context1 = (7,"百度","baidu")
context2 = (8,"学习通","xuexi365")
print(template%context1)
print(template%context2)
运行结果如下:
(2)使用字符串对象的format()
格式:
str.format(args)
format:用于指定字符串的显示样式
args:用于指定要转换的项,如果有多个项,则用逗号分隔。
创建模板:
格式:
{[index][:[[fill]align][sign][#][width][.precision][type]]}
参数 | 含义 |
index | 可选参数,用于指定要设置格式的对象在参数列表中索引位置,索引值从0开始,如果省略,则根据值的先后顺序自动分配 |
fill | 可选参数,用于指定空白填充的字符 |
align | 可选参数,用于指定对齐方式,<表示内容左对齐、>表示内容右对齐、=表示内容右对齐,将符号放在填充内容最左侧,且只对数字类型有效。 |
sign | 可选参数,指定无符号数,+表示正数前方加正号,负数前方加负号、-表示正数前方无符号,负数前方加负号、值为空格表示正数前方加空格,负数前方加负号 |
# | 可选参数,对于二进制、八进制和十六进制加上#会显示0b/0o/0x前缀,否则不显示前缀 |
width | 可选参数,表示占用宽度 |
.precision | 可选参数,表示小数点后保留几位 |
type | 可选参数,指定类型 |
格式化字符 | 含义 | 格式化字符 | 含义 |
s | 对字符串类型进行进行格式化 | b | 将十进制转化成二进制表示在格式化 |
c | 字符将十进制数转化成对应的Unicode字符 | o | 将十进制转化成八进制表示在格式化 |
d | 十进制整数 | x/X | 将十进制转化成十六进制表示在格式化 |
e/E | 转换成科学计数法表示在格式化) | g/G | 自动在e和f或者E和F中切换 |
f/F | 浮点数(默认小数点保留6位) | % | 显示百分比(默认显示小数点6位) |
示例:
template='编号:{:0>9s}\t公司名称:{:s}\t官网:http://www.{:s}.com'
context1=template.format('7','百度','baidu')
context2=template.format('8','学习通','xuexi365')
print(context1)
print(context2)
运行结果如下:
就是按照格式,缺啥补啥就可以。今天就这样啦,拜拜!
最后喜欢的话关注一下吧!