Python字符串说明
3、字符串数据类型(重点中的重点)str
python中字符串默认是unicode编码的(支持中文等多国语言,2个直接表示一个汉字)、拓展编码集utf-8(可变长度的unicode编码,3个直接表示一个汉字)
1)字符串的定义
字符串是单引号或者双引号来表示。‘abcd’ “abcdefg” ‘a’ “a”
name = “gugu”
name = ‘gugu’
- 字符串中的**\是有特殊含义的,是转义字符**
name = "我是 " gugu 测试"
# name = "我是 \" gugu 测试"
# name = "我是gugu测试\n,我去学习啦!!"
name = "我是gugu测试\t,我去学习啦!!"
print(name)
- 如果是涉及到字符串嵌套问题的处理:
# 字符串嵌套1:使用转义的方式实现了
# slogen = "六王毕\"四海一\""
# 字符串嵌套2:区分使用单引号和双引号,内单外双、内双外单
slogen = "六王毕'四海一'"
print(slogen)
- 自然字符串的定义(重点):在字符串之前添加r或者R,取消了转义字符\作用的用法
# 自然字符串的使用,在字符串的前面加上r或者R来表示
# 现在的\t就是一个字符串,没有了特定的含义了
# 一般用于对路径的处理上
# name = r"我是gugu测试\t,我去学习啦!!"
# print(name)
paths = "D:\Program Files (x86)\Steam\steamapps\workshop\content\431960\888689688"
# 方法1:通过再加一个\,将之前的\的转义功能取消掉
paths = "D:\Program Files (x86)\\Steam\\steamapps\\workshop\\content\\431960\\888689688"
# 方法2:自然字符串表示
paths = R"D:\Program Files (x86)\Steam\steamapps\workshop\content\431960\888689688"
print(paths)
- 字符串的多行显示问题:一个字符串特别长,一行写不下了,怎么办,建议使用第一种写法。
# 声明一个变量,并初始化赋值字符串
longstring = r"长叹息以掩气兮,"\
r"哀民生之多艰"
print(longstring)
#
longString1 = "长叹息以掩气兮,\n\
哀民生之多艰。"
print(longString1)
#
longstring3 = "长叹息以掩气兮,\
哀民生之多艰"
print(longstring3)
2)字符串编码问题
在python语言中,每一个字符(字母、汉字、日文等)都会对应一个==unicode字符集中的整数编码==。
1)字符和编码的转换
ord() : 将一个字符转为整数编码
chr():将一个整数编码转为对应的字符
#转为整数编码格式
print(ord("犇"))
print(ord("森"))
print(ord("龘"))
#将整数编码转为字符
print(chr(29319))
print(chr(26862))
print(chr(40856))# 龘
# unicode编码是兼容ascii码的(只有128个字符)
print(chr(65))# A
print(chr(97))# a
print(chr(41000))
看到这里的人都:祝大家明年龙行龘龘
2)编码、解码、乱码
编码:将字符串转为整数的过程叫做编码,encode()
解码:将整数转为字符串的过程,必须和编码的字符集要相同,decode()
乱码:编码和解码用的字符集不同,乱码不一定是出了特殊符号
# 1、将A字符串编码为ascii字符集中的整数形式(二进制、十进制、十六进制)
print("A".encode("ascii")) # b'A'
# 2、好,按照gb2312字符集转为整数
print("好".encode("gb2312")) #b'\xba\xc3'
print("好".encode("utf8")) # b'\xe5\xa5\xbd'
# 3、b'\xba\xc3' 按照gb2312转为汉字(解码)
str1 = b'\xba\xc3'
print(str1.decode("gb2312"))
# print(str1.decode("utf8"))
# 3、b'\xd0\xa1 按照gb2312转为汉字(解码)
str1 = b'\xd0\xa1' # 对应的小
print(str1.decode("gb2312"))
print(str1.decode("utf8")) # С---->斯拉夫语言
3)字符串的格式化输出
print()可以输出数据到控制台的。
常见的占位符:
- %d:接收整数,不能接字符串
- %s:接字符串的,但是你给整数也行
- %f:接浮点数,不能接字符串
- %ms:m表示数据宽度
格式化数的方式:
- print(“%s”%age)
- print(“xx”+age)
- print(“{}”.format(age))
关于结尾字符的使用:end参数
"""
# -*- conding:utf-8 -*-
# @time : 2023/12/9 17:27
# @Author : 咕咕
# 优快云 :咕咕在测试
"""
# print("12")
# 格式化:按照设定的格式输出数据
# 需求:输出控制台信息:我的年龄是28/38/xx(自己改)岁。
# age = input("请输入年龄:")
# 直接输出字符串
# print(age)
# %s : 字符串占位符(数值)
# %d :整数数据
# %f : 浮点型数据
# %m.nf : 浮点型数据,m和n指的的是整数和小数部分的长度
# %d format: a number is required, not str
# print("我的年龄是%d岁。"%age)
# 方式1
# print("我的年龄是%s岁。"%age)
# 方式2
# print("我的年龄是{}岁".format(age))
# 需求2:我的年龄是28/38/xx(自己改)岁,姓名是yy。
age = input("请输入年龄:")
name = input("请输入姓名:")
# 格式化输出
print("我的年龄是%s,我的姓名是%s."%(age,name))
print("我的年龄是{},我的姓名是{}。".format(age,name))
print("我的年龄是{1},我的姓名是{0}。".format(age,name))
print("我的年龄是{1},我的姓名是{1}。".format(age,name))
print("我的年龄是"+age+",我的姓名是"+name+".")
# 关于输出数据的宽度问题
print("我的年龄是:%5s"%age)
print("我的薪资是%2.3f."%(12345.6789))
# 关于字符串的结尾符
print("我的年龄是{1},我的姓名是{1}。".format(age,name),end="\t")
print("我的年龄是:%5s"%age)
4)字符串处理的运算符
字符串是有序的、可索引的、可重复的、不可改变的、可切片(重点)。
- 索引的格式:字符串变量名[索引号],索引号有两种正向和反向
# 定义一个字符串,吧字符串看作是一个由多个元素组成的数据结构
str1 = "abcdefg"
# 可索引的,正向和反向索引
# 索引的格式:字符串变量名[索引号]
print(str1[0])
print(str1[-1])
# string index out of range
# print(str1[7]) # 会报错
print(str1[-7])
- 切片:所有的序列类型都能切片,格式:字符串变量名[start🔚step]
通过切片可以得到一个子序列(子字符串),左闭右开,可以取到start索引号对应的元素,但是取不到end索引号对应的元素。
# 切片: 变量名[start:end:step]
# 默认的step都值都是1
print(str1[0:2])
print(str1[-7:-1])
# 0是正向索引、-7是反向索引,取不到值
print(str1[-7:0])
print(str1[-7:])
print(str1[:])
# 加上step参数,步调,隔几个取一个值
print(str1[0:4:2])
print(str1[::-1])
# 字符串是不变的,切片的只是一个副本
print(str1)
- 字符串可以使用+运算符进行拼接运算
- 字符串可以使用*运算符进行复制运算
# +运算符
str2 = "123456"
str3 = str1 + str2
str4 = "abc" \
"123"
print(str3)
print(str4)
# *复制运算符
print(str2*2)
print(str2)
- 字符串支持成员运算:in和not in,判断某个数据是否是字符串的元素(子串)。
str2 = "123456"
print("234" in str2)
print("2346" in str2)
print("2346" not in str2)
5)字符串处理的常用方法
- 获取字符串中某个元素的索引号的方法:index(),是序列类型的通用方法,查不到子串会报错
str2 = "123456"
print(str2.index("2"))
print(str2.index("234")) #返回到匹配上的第一个元素的索引号
# 报valueerror: substring not found
# print(str2.index("7"))
print(str2.index("2",2,4))
- 获取字符串中某个元素的索引号的方法:find(),只能给字符串使用,查不到不报错,会返回-1
str2 = "123456"
print(str2.find("2"))
print(str2.find("234")) #返回到匹配上的第一个元素的索引号
print(str2.find("7")) # -1
print(str2.find("2",2,4))
- 获取字符串的长度(元素的个数)的方法:len(),是序列类型的通用方法
print(len(str2))
- 通过相同子串出现次数的方法:count(),是序列类型的通用方法
print(str2.count("2"))
- 返回最大元素和最小元素的方法:max()、min(),是序列类型的通用方法,比得是元素的ascii对应整数的大小
print(ord("6")) # --54
print(ord("1")) # --49
print(max(str2))
print(min(str2))
- 去除字符串中的空格,左边、右边和两边,lstrip()\rstrip()\strip()
str5 = " abc 123 ef "
print(str5.lstrip())
print(str5.rstrip())
print(str5.strip())
- 首字母大写、转全大写、全小写的方法
# 首字母大写
str6 = "aBcDeF allen"
print(str6.title())
# 全部转为大写、小写
print(str6.upper())
print(str6.lower())
- 字符串分割的方法
str7 = "186-2198-4010"
print(str7.split("-"))
- 字符串替换的方法
print(str7.replace("4010","8888"))
print(str7)
- 字符串判断以xx开头的方法
print(str7.startswith("1"))