【Python字符串说明】

本文详细介绍了Python中字符串的基础概念,包括字符串数据类型(如unicode和utf-8)、字符串定义、转义字符、格式化输出、字符串运算符、编码与解码问题、乱码处理以及常用的字符串处理方法,如索引、切片、拼接、复制和判断等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咕咕在测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值