同是天涯沦落人,相逢何必曾相识——python字符串操作

同是天涯沦落人,相逢何必曾相识!
我从去年辞帝京,谪居卧病浔阳城。

1 字符串的声明

字符串使用一对单引号包含,会出现在纯python语言环境中。
字符串通常使用一对双引号包含,因为python会和其他混合开发,使用双引号更为通用。
长字符串:三对引号包含起来的可以换行的字符串, 通常用于多行注释(如文档注释)。

2 字符串切片

2.1 字符串索引

因为字符串是由一系列字符有顺序的排列组成的,所以字符串中的每个字符都在字符串中有自己的索引编号
字符串从左到右,索引从0开始依次
字符串从右往左,索引从-1开始
空格也算作字符

s = "同是天涯沦落人,相逢何必曾相识!"
print(s[6])  # 人
print(s[-3])  # 相

2.2 字符串切片

基本语法:S[开始位置 : 结束位置 : 步长]
字符串切片包含开始位置,不包含结束位置(左闭右开),按照步长进行间隔切片(步长包含自己)
开始索引不写默认开头,结束索引不写默认到尾部步长不写默认为1
步长为负,则倒过来取值
类似的,切片在列表和元组中也可使用,获取相应元素

s = "同是天涯沦落人,相逢何必曾相识!"
print(s[:7])  # 同是天涯沦落人
print(s[4:7])  # 沦落人
print(s[3:10:2])  # 涯落,逢
print(s[-3:-7:-1])  # 相曾必何
# 字符串翻转
print(s[::-1])  # !识相曾必何逢相,人落沦涯天是同

3 字符串常见操作

3.1 字符串变形

str1 = "tong shi TIAN YA lun luo ren"
# upper() 全部大写
print(str1.upper())  # TONG SHI TIAN YA LUN LUO REN
# lower() 全部小写
print(str1.lower())  # tong shi tian ya lun luo ren
# title() 标题首字母大写,字符以非字母划分
print(str1.title())  # Tong Shi Tian Ya Lun Luo Ren
# captialize() 句子首字母大写
print(str1.capitalize())  # Tong shi tian ya lun luo ren
# swapcase() 大小写转换
print(str1.swapcase())  # TONG SHI tian ya LUN LUO REN

3.2 字符串查询

s = "同是天涯沦落人,相逢何必曾相识!"

# index() 返回从左起第一个字符的索引,没有会报错
# rindex()  返回从右起第一个字符串索引(索引依然为正)
print(s.index("人"))  # 返回索引 6
print(s.index("行"))  # ValueError: substring not found


# find()  返回从左找到第一个字符的索引,没有则返回-1
# rfind()  返回从右起第一个字符串索引(索引依然为正)
print(s.find("天"))  # 2
print(s.find("江"))  # -1

# startswith()  查看是否以指定字符开头,可以截取判断
print(s.startswith("同"))  # True
print(s.startswith("相"))  # False
print(s.startswith("天", 2, 5))  # True 从索引2开始查询至索引5

# endswith()  查是否以指定字符结尾,可以截取判断
print(s.endswith("!"))  # True
print(s.endswith("识"))  # False
print(s.endswith("沦", 2, 5))  # True 从索引2开始查询至索引5

# count()  统计指定字符
print(s.count("相"))  # 2

3.3 字符替换

# replace(old, new) 默认全部替换,可指定替换次数
s = "不是天涯沦落人"
print(s.replace("不", "同", 1))  # 同是天涯沦落人 # 1是替换次数

3.4 字符对应关系替换

import string
s = "tianya"
s1 = string.ascii_letters + string.digits
# 由string模块得到字母和数字的拼接 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
s2 = string.digits + string.ascii_letters
# 同理,得到 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY
secret_dict = dict(zip(s1, s2))  # zip函数用于建立对应关系,如"a": 0
secret_table = str.maketrans(secret_dict)  # 创建对应关系表
s4 = s.translate(secret_table)  # 根据创建的对应关系表替换
print(s4)  # j80do0

3.5 字符串拆分和拼接

s = "相逢何必曾相识"
# split()  按照从左起给定的第一个字符对字符串进行拆分,得到拆分后的列表,分割字符不会出现在列表,经常进行批量数据的拆分操作
# rsplit() 从右边开始拆分,功能同上
print(s.split("相"))  # ['', '逢何必曾', '识'] 第一个分割前面没有字符,故得到空字符串
print(s.split("何必"))  # ['相逢', '曾相识']
# 可指定分割次数,默认为-1,即最大分割
print(s.split("相", maxsplit=1))  # ['', '逢何必曾相识']

# partition() 按照从左起第一个给定的字符,将字符串拆分成三部分组成的元组,经常进行路径文件名称的拆分
# rpartition() 从右边开始,功能同上
print(s.partition("相"))  # ('', '相', '逢何必曾相识')
print(s.partition("何必"))  # ('相逢', '何必', '曾相识')

# join() 按照指定的字符,将一串有序列的数据进行拼接
# 拼接字符.join(列表)
s1 = ""
lst = ["相逢", "何必", "曾相识"]
print(s1.join(lst))  # 相逢何必曾相识

# rsplitlines() 按照行分隔,返回一个包含各行作为元素的列表,按照换行符分分割
s2 = """同是天涯沦落人,
相逢何必曾相识!"""
print(s2.splitlines())  # ['同是天涯沦落人,', '相逢何必曾相识!']

3.6 字符串的空格处理

# strip()  去掉两边空格,括号内也可指定去除内容
# lstrip()  去掉左边空格,括号内也可指定去除内容
# rstrip()  去掉右边空格,括号内也可指定去除内容
s = "          我从去年辞帝京           "
s2 = "**我从去年辞帝京**"
print(s.strip())  # 我从去年辞帝京  # 两边没空格
print(s2.strip("*"))  # 我从去年辞帝京

3.7 字符串对齐操作

s = "我从去年辞帝京,谪居卧病浔阳城。 "

# center() 居中
# ljust() 左对齐
# rjust() 右对齐
# 括号第一个参数是所占字符,第二个参数是填充字符,默认不写为空
print(s.center(30,))  #       我从去年辞帝京,谪居卧病浔阳城。        
print(s.center(30, "*"))  # ******我从去年辞帝京,谪居卧病浔阳城。 *******

# zfill 字符串填充到指定的长度,不足地方用 0 从左开始补充
print(s.zfill(30))  # 0000000000000我从去年辞帝京,谪居卧病浔阳城。

3.8 字符串判断

s1 = "13"
s2 = "wocongquniancidijing"
s3 = "13xuedepipcheng"
s4 = "xunyang"
s5 = "XUNYANG"
s6 = "XunYang"

# isalnum() 是否只包含字母或数字
print(s1.isalnum())  # True
print(s2.isalnum())  # True
print(s3.isalnum())  # True

# isalpha() 是否只有字母
print(s1.isalpha())  # False
print(s2.isalpha())  # True
print(s3.isalpha())  # False

# isdigit()  是否只有数字
# True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
# False: 汉字数字
print(s1.isdigit())  # True
print(s2.isdigit())  # False
print(s3.isdigit())  # False

# isnumeric()  是否只有数字
# True: Unicode数字,全角数字(双字节)
# False: 罗马数字,汉字数字
# Error: byte数字(单字节)
print(s1.isnumeric())  # True
print(s2.isnumeric())  # False
print(s3.isnumeric())  # False

# isupper() 当中的字母是否大写,其他字符不影响
print(s4.isupper())  # False
print(s5.isupper())  # True
print(s6.isupper())  # False

# islower() 当中的字母是否小写,其他字符不影响
print(s4.islower())  # True
print(s5.islower())  # False
print(s6.islower())  # False

3.9 编码和解码

s = "天涯"
#encode() 编码,将字符串转换成字节码
s_byte = s.encode("utf-8")  # b'\xe5\xa4\xa9\xe6\xb6\xaf'
print(s_byte)
#decode() 解码 ,将字节码转换成字符串,和编码格式要对应
print(s_byte.decode("utf-8"))  # 天涯

4 字符串格式化展示

4.1 %格式化展示

常见的占位符:
  %s:输出一个字符串格式的数据
  %d:输出一个整数数据
  %f:输出一个浮点数数据

占位符格式:
  %ws:w表示输出字符串的宽度,字符串展示右对齐
  %-ws:-w表示输出字符串之后左对齐字符串
  %5.2f:5表示数据宽度,.2表示保留小数位数

# 字符串 %(元组中要替换的数据)
s1 = "沦落人"
s2 = "相识"
print("同是天涯%s,相逢何必曾%s" % (s1, s2))  # 同是天涯沦落人,相逢何必曾相识

4.2 foemat()格式化展示

#   基本语法:字符串.formart(要替换字符串中占位符的数据)

# 使用位置参数填充
s1 = "沦落人"
s2 = "相识"
print("同是天涯{},相逢何必曾{}。".format(s1, s2))  # 同是天涯沦落人,相逢何必曾相识。

# 使用关键字参数
content = "我的名字叫{name},今年{age}岁。"
print("同是天涯{s1},相逢何必曾{s2}。".format(s1="沦落人", s2="相识"))  # 同是天涯沦落人,相逢何必曾相识。

4.3 f""格式化展示

s1 = "沦落人"
s2 = "相识"
print(f"同是天涯{s1},相逢何必曾{s2}。")  # 同是天涯沦落人,相逢何必曾相识。

4.4 格式化、精度、精致

4.4.1 %格式
"""
格式化
	%s # 不占位输出
	%10s  # 占10个字符宽度,右对齐
	%-10s  # 占10个字符宽度,左对齐
	%08d  # 占8个字符,右对齐,不够8位补0

精度
	%.2f  # 保留2位小数
	%5.2f  # 占5个字符,保留两位小数
	%05.2f  # 占5个字符,保留2位小数,不够前面补0

进制
	%o 格式化无符号八进制数
	%x 格式化无符号十六进制数
	%X 格式化无符号十六进制数(大写)
"""

4.4.42 format()和f""格式
# 需要带冒号
"""
格式化
    :[填充字符][对齐方式 <^>][宽度]
    < 表示向左对齐, ^表示居中对齐, >表示向右对齐

精度  :wf  w 小数位数

进制
    :b 二进制
    :o 八进制
    :x 十六进制
"""

s1 = "同是天涯沦落人"
s2 = 5
print(f"{s1:*<20}")  # 同是天涯沦落人*************
print(f"{s2:0>10.2f}")  # 0000005.00
print(f"{s2:b}")  # 101

5 字符串转义

5.1 转义

使用改变字母意义的符号:\(反斜杠),就称为转义符号
在字符串之前添加字母元字符串( r或者R),则不会进行转义

"""
常用转义:
    \n:换行
    \r:回车
    \a:警铃
    \ 续行符,一行代码编写不完,添加该符号后可以换行继续编写
    \\ 反斜杠符号
    \' 单引号
    \" 双引号
    \v 纵向制表符
    \t 横向制表符
    \r 回车(覆盖前面的)
"""

print("同时天涯沦落人,\r相逢何必曾相识\\")  # 相逢何必曾相识\

# 元字符串 在任意字符串之前添加字母 r或者R,那么当前字符串中所有转义字符在使用时都不会进行转义操作
print(r"同时天涯沦落人,\r相逢何必曾相识\\")  # 同时天涯沦落人,\r相逢何必曾相识\\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值