Python字符串

1.字符串创建

  • 字符串就是由若干个不同的unicode字符组成的不可变序列
# 单引号字符串
str1 = '对酒当歌,人生几何。'
str2 = str([10,20,30])
# 空字符串
str3 = str()

# 双引号字符串
str4 = "记忆是一种相遇,遗忘是一种自由"

# 三引号字符串,多行字符串
str5 = '''
好雨知时节
当春乃发生
'''
str6 = """
随访潜入夜
润物细无声
"""

2.获取字符串

  • 字符串是不可变序列,所以不能修改单个字符;凡是修改字符串的操作都产生新串
str4 = "记忆是一种相遇,遗忘是一种自由"
print(str4[0],str4[-1])    #输出记,由

3.原生字符

  • 字符串转义参考博客《Python数据类型与运算2》
  • 在python没有字符的概念,即使只有一个字符也叫字符串
# 如果在字符串中不把\当作转义字符,使用原生字符
path = r"C:\course\hixun\1"   
print(path)   #输出C:\course\hixun\1

4.字符串常用操作

4.1 拼接字符串

  • 两个相邻字符串没有其他字符会自动拼接为一个字符串
str1 = '四月' "是你的谎言"
print(str1)   #输出:四月是你的谎言
  • 使用"+"运算符拼接字符串,并产生一个新的字符串
str1 = '四月'
str2 = '是你的谎言'
print(str1 + str2)    #输出:四月是你的谎言

4.2 字符串重复

  • 使用"*"实现字符串重复
str1 = "汪汪"
print(str1 * 3)  # 输出:汪汪汪汪汪汪

4.3 成员操作

  • 使用"in"关键字判断字符串是否存在
str1 = "可能我撞了南墙才会回头把!"
if "南墙" in str1:
    print("该字符串存在")    # 输出:该字符串存在

4.4 计算字符串长度

  • 在Python中,数字,英文,小数点,下划线和空格各占一个字节;
  • 一个汉字在GBK/GB2312编码占两个字节,在UTF-8/Unicode中一般占3个字节(或者4个字节)
  • 通过len()函数计算字符串长度,不分区英文数字和汉字,所有的字符都认为1个
str1 = "啊1"
print(len(str1))                     # len()输出:2
print(len(str1.encode('utf-8')))     # UTF-8编码长度4,汉字占3,字母占1
print(len(str1.encode('gbk')))       # GBK编码长度3,汉字占2,字母占1

4.5 字符串截取(切片)

  • 语法:string[start:end:step]
  • 字符串切片操作与列表元组一样,不在左过多实验,详细请看博客《Python列表和元组1》
str4 = "记忆是一种相遇,遗忘是一种自由"
print(str4[:5:2])     #输出:记是种

5.字符串常用函数

5.1 字符串查找和替换

方法名说明
str.count(sub[,start[,end]])查找字符串sub出现的次数;start从指定下标开始查;end结束下标默认字符串长度
str.find(sub[,start[,end]])从左向右检查字符串中是否包含字符串sub,如果包含返回下标,否则返回-1。start和end可选参数,指定查找范围
str.rfind(sub[,start[,end]])从右开始检查字符串中是否包含字符串sub,如果包含返回下标,否则返回-1。start和end可选参数,指定查找范围
str.index(sub[,start[,end]])方法同find()方法类似,如使用index()方法,当指定的字符串不存在时会抛出异常
str.rindex(sub[,start[,end]])方法与index()方法类似,从右向左查找
str.replace(old,new[,count])返回一个新字符串,原串中old被替换为new,可选参数count指定替换次数
# count()统计字符串出现次数
str = "你你我我我他他他他"
print(str.count("你"))        # 输出:2

# find()从左往右查;find()从右往左查,找不到输出"-1"
str1 = "记忆是一种相遇,遗忘是一种自由,忆"
print(str1.find("忆"))   # 输出:1
print(str1.rfind("忆"))  # 输出:16
print(str1.find("渣"))   # 输出:-1

# index()用法与find()一样,找不到会报错
str2 = "人生苦短,Python是岸"
#print(str2.index("V"))   # 输出:ValueError: substring not found

# replace()替换字符
str3 = "a e b"
res = str3.replace("a","b")
print(str3)                 # 输出:a e b
print(res)                  # 输出:b e b

5.2 分割字符串

  • Python中,可以使用split()方法实现字符串分隔,把字符串分隔为列表
# 语法:str.split(sep,maxsplit)
# sep:指定分隔符,默认None(空格,换行"\n",制表符"\t")
# maxsplit:指定分割次数,如果不指定或-1,没有分割限制
# split(分隔符字符串,分割次数) 分割后产生一个列表
str1 = 'a fox jumped over the fence'
res1 = str1.split()
res2 = str1.split(" ",2)
print(res1)      # 输出:['a', 'fox', 'jumped', 'over', 'the', 'fence']
print(res2)      # 输出:'a', 'fox', 'jumped over the fence']

5.3 .join()函数

  • 把列表中字符元素组合成一个字符串
 # "分隔符".join(列表或元组,列表或元组的元素必须是字符串
list1 = ["四月的","风",",八月的",'雨。']
list2 = ("四月的","风",",八月的",'雨。')
res1 = ''.join(list1)    
res2 = ''.join(list2)
print(res1)              # 输出:四月的风,八月的雨。
print(res2)              # 输出:四月的风,八月的雨。

5.4 字符串判断

方法说明
str.isalpha()判断字符串是否字母构成并且只包含字母,是返回True,否返回False
str.isalnum()检测字符串是否由字母和数字组成,如果都是数字或字母返回True,否则返回False
str.isdigit()检测字符串是否由数字构成,可检测byte类型
str.isdecimal()检测字符串是否由数字构成
str.isnumeric()检测字符串是否由数字构成,可以检测汉字数字:十
str.isspace()检测字符串是否只有空格或tab构成
str.islower()检测字符串中的字母是否全部都是小写字母组成
str.isupper()检测字符串中的字母是否都是由大写字母组成
str.startswith(suffix[, start[, end]])用于判断字符串是否以指定字符串开头,如果是返回True,否则返回False
str.endswith(suffix[, start[, end]])用于判断字符串是否指定字符串结尾,如果是则返回True,否则返回False
# 判断字符串是否由字母构成并且只包含字母,是返回True,否返回False
Str = "你好nnn"
print(Str.isalpha())         # 返回:True

# 检测字符串是否由字母和数字组成,如果是数字或字母返回True,否则返回False
Str = "你好nnn221"
print(Str.isalnum())        # 输出:True

# 检测字符串是否以指定字符串开头或结尾,如果是返回True,否则返回False
Str = "yxy@ytrx.com.cn"
print(Str.startswith("y"))       # 输出:True
print(Str.endswith("n"))         # 输出:True

5.5 字符串转换

方法说明
str.lower()字符串转小写
str.upper()字符串转大写
str.swapcase()把字符串中的大小写字母互换,大写转换成小写,小写转换成大写。不去管非字母类字符。
str.capitalize()将字符串中的第一个字符转为大写,其余转为小写
str.title()字符串中每个单词的首字母大写,其余小写
str.strip([chars])去除字符串两边指定的字符,默认是去除空格
str.lstrip([chars])去除字符串左边指定的字符,默认是去除空格
str.rstrip([chars])去除字符串右边指定字符,默认是去除空格
# 字符串转换
print("i am".upper())     # 转大写
print("I am".lower())     # 转小写

# strip 截取
# strip 删除字符串两边指定字符,默认删除空白字符(回车、换行、空格、tab)
print("aa1233aa".strip("aa"))     # 输出:1233
print("  ddfsdf  ".strip())       # 输出:ddfsdf
print("  ddfsdf  ".rstrip())      # 输出:  ddfsdf

5.6 其他方法

  • ord()返回一个字符所对应的ASCII码值
# 语法:ord(x)
print(ord('中'))   # 输出:20013
  • chr()输入一个unicode码,返回一个对应的字符
# 语法:chr(x)
print(chr(20013))  # 输出:中

6.字符串格式化

6.1 用%号格式化

# 语法:%[flags][width][.precision]typecode
# flags:对其方式,- 左对齐 + 右对齐(默认),0表示用0填充(只针对数值型),默认使用个空格填充
# width:所占宽度,单位是列
# .precision:精度,如果带小数点,可以指定带几位小数点,指定后四舍五入
# typecode: d将数值转换为整型显示;f将数值转换为浮点数显示;s将数值转换为字符串显示
# 大家好,我叫   王尼玛,我今天24岁了,我只有12.34个棒棒糖
print('大家好我叫%3s,我今年%d,我有%08.2f棒棒糖'%('王尼玛',24,12.3433) # 输出:大家好我叫王尼玛,我今年24,我有00012.34棒棒糖

6.2 用forma格式化

:<填充><对齐>宽度,<.精度><类别>
用于填充的单个字符< 左对齐;> 右对其;^ 居中对齐槽的设定输出宽度数字的千位分割符,适用于整数和浮点数浮点数小数部分的精度或字符串的最大输出长度整数类型B,c,d,o,x,X浮点数类型e,E,f,%
# 语法[[fill]align][sign][#][width][.precision][type]
# fill:填充字段,可选
# align:对齐方式 < 左对齐 > 右对齐 ^ 居中对齐
# sign:指定有无符号(值"+"表示正数加正号,负数加符号;值为"-"表示正数不变,负数加负号;值为空格表示正数加空格,负数加负号)
# : 对于2,8,16进制显示0b 0o 0x
# width:宽度
# ,千分位分割符
# .preision:精度
# type:s字符串;d整型;f浮点数
# {} 占位符
import math
import math                                                              #导入数学模块
print("以货币形式显示: ¥{:.2f}元".format(1251+3950))                      #以货币形式显示
print("{0:.1f}用科学计数法显示:{0:E}".format(12000.1))                     #用科学计数法显示
print("π取5为小数: {:.5f}".format(math.pi))                               #输出小数点后五位,π值用math.pi表示
print("{0:d}的十六进制是: {0:#x}".format(100))                             #十六进制显示
print("天才是由{:.0%}的灵感,加上{:.0%}的汗水".format(0.01,0.99))
'''
输出:
以货币形式显示: ¥5201.00元
12000.1用科学计数法显示:1.200010E+04
π取5为小数: 3.14159
100的十六进制是: 0x64
天才是由1%的灵感,加上99%的汗水

'''

7.字节

在Python3中最重要的特性是对文本和二进制数据做了更清晰的区分,文本总是Unicode,由字符类型表示,而二进制数据由byte类型表示,Python3不会以任意隐藏方式昏庸字节类型和字符型,也因此在Python3中不能拼接字符串和字节包(Python2中可以,会自动进行转换),也不能在字节保重搜索字节串,也不能将字符串传入参数为字节包的函数

Bytes对象是由单个字节作为基本元素(8位,取值范围0-255)组成的序列,为不可边对象。Bytes对象只负责二进制字节序列的形式记录所需记录的对象,至于对象到底表示什么(比如到底是什么字符)则有相应的编码格式解码决定。Python3中,bytes常用于网络数据传输,二进制图片,和文件的保存等。可以通过调用Bytes实例,其形式为b’xxxx’,其中的’xxxx’为一至多个转义的十六进制字符串(单个x的形式为:\x12,其中\x为表写的十六进制转义字符,12为二位十六进制数)组成的序列,每个十六进制代表一个字节(八位二进制数,取值范围0-255),对于同一个字符串如果采用不同的编码生成bytes对象,就会形成不同的值
在这里插入图片描述

7.1 创建字节

b = b'Hello,world'
print(type(b))        # 输出<class 'bytes'>

7.2 字符串和字节的转换

# python字符串=>转字节字符串
password = "123"               # python字符串
res = password.encode("utf8")  
print(res,type(res))           #输出b'123' <class 'bytes'> 
# 加密
res = hashlib.sha1(res).hexdigest() 
print(res)                    # 40bd001563085fc35165329ea1ff5c5ecbdbbeef

# 字节字符串转python字符串
b2 = b"hello"
res = b2.decode("utf8")
print(res,type(res))

8.作业

8.1 输入一个字符串,统计该字符串有多少个字符,不许使用len()函数

Str = input("请输入:")
j = 0
for i in Str:
    j += 1
print("共有{:d}字节".format(j))

8.2 任何一个字符串,请验证是否是手机号,手机号为11位数字,开头三位必须是130,151,186

  • 使用列表存储130,151,186;使用in判断
  • 使用切片左取3位
Str = input("请输入判定是否为手机号:")
List = [130,151,186]
if len(Str) == 11:
     if int(Str[:3]) in List:
          print("是手机号")
     else:
         print("输入的不是手机号")
else:
     print("输入的不是手机号")

8.3 input函数每次只能输入一个字符串,请实现如下输入格式:1,20,30.然后将字符串字符进行分割,得到:3个整数,然后赋值给三个变量。

Str = input("请输入:")
a,b,c = Str.split(",")
a = int(a)
b = int(b)
c = int(c)
print("a",a)
print("b",b)
print("c",c)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值