10.Python【序列】- 字符串(下)

简介: 10.Python【序列】- 字符串

10.Python【序列】- 字符串(上):https://developer.aliyun.com/article/1528743

4.5 替换字符串

字符串是不可变序列,所有的修改都会创建新的字符串

使用replace()替换,返回字符串的副本,其中出现的所有子字符串old都将被替换为new,如果给出了可选参数count,则只替换count次出现。

str.replace(old,new[,count])

str1 = 'www.mysite.cn'
print(str1.repalce('mysite','mysql')) # www.mysql.cn

使用expandtabs()替换,返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制表符宽度。每个tabsize 个字符设为一个制表位,默认值8设定的制表位在列0、8、16…。

str.expandtabs(tabsize=8)

print(len('1\t'.expandtabs(8))) # 输出 8,1后面添加了7个空格
print(len('1\t1'.expandtabs(8))) # 输出 9,1后面添加了7个空格
print(len('1\t'.expandtabs(8))) # 输出 8,1后面添加了7个空格
print(len('123456781\t1'.expandtabs(8))) # 输出 16,1后面添加了7个空格

使用maketrans(),返回一个可供translate()使用的转换对照表,进一步使用translate(),返回原字符串的副本,其中每个字符按给定的转换表进行映射。

str.maketrans(intab,outtab[,delchars])
bytes.maketrans(intab,outtab)
bytearray.maketrans(intab,outtab)

str.translate(table)
bytes.translate(table[,delete])
bytearray.translate(table[,delete])

a = b"ABCDEFGHIJKLMNOPORSTUVWXYZ" # 大写字节型字符集
b = b"abcdefghijklmnopqrstuvwxyz" # 小写字节型字符集
d = b"THON" # 删除字节型字符集
t1 = bytes.maketrans(a,b) # 创建字节型字符映射转换表
s = b"PYTHON" # 原始字节串
s = s.translate(None, d) # 若table 参数为 None,则只删除不映射
s = s.translate(t1) # 执行映射转换
print(s) # 输出为 b'py'

4.6 裁切字符串

使用strip(),返回原字符串的副本,移除其中的前导和末尾字符;chars 参数为指定要移除字符的字符串,如果省略或为None,chars 参数默认移除空格符。lstrip() 返回原字符串副本,移除其中的前导字符。rstrip() 返回原字符串副本,移除其中的末尾字符。

str.strip([chars])
str.lstrip([chars])
str.rstrip([chars])

print('www.example.com'.strip('cmowz.'))
print('  www.example.com  '.strip()) # 'www.example.com'
print('  www.example.com  '.lstrip()) # 'www.example.com  '
print('  www.example.com  '.rstrip()) # '  www.example.com'

4.7 转换大小写格式

可以使用以下三种方法检测字符串的大小写格式:

  • islower():检测字符串是否为纯小写的格式。
  • isupper():检测字符串是否为纯大写的格式。
  • istitle():检测字符串是否为“标题化“格式。

字符串大小写格式转换有6种方法:

  • lower():返回原字符串的副本,其中所有区分大小写的字符均转换为小写。
  • upper():返回原字符串的副本,其中所有区分大小写的字符均转换为大写。
  • title():返回原字符串的标题副本,每个单词第一个字母为大写,其余字母为小写。
  • capitalize():返回原字符串的副本,其首个字符大写,其余为小写。
  • swapcase():返回原字符串的副本,其中大写字符转换为小写,反之亦然。
  • casefold():返回原字符串消除大小写的副本。
print('Python'.islower()) # False
print('Python'.isupper()) # False
print('Python'.istitle()) # True
print('Python'.lower()) # python
print('Python'.upper()) # PYTHON
print('HELLO PYTHON'.title()) # Hello Python
print('HELLO PYTHON'.capitalize()) # Hello python
print('HELLO PYTHON'.swapcase())# hello python
print('HELLO PYTHON'.casefold())# hello python

4.8 检测字符串类型

检测数字、字母和特殊字符:

  • isascii():如果字符串为空或所有字符都是ASCII,返回True,否则False。ASCII范围是U+0000~U+007F。
  • isdecimal():如果字符串中的所有字符都是十进制字符,且该字符串至少有一个字符,则返回True,否则False。十进制字符指可以用来组成十进制数的字符,如U+0660,即数字0。
  • isdigit():如果字符串中所有字符都是数字,并且至少有一个字符,返回True,否则False。数字包括十进制字符和需要特殊处理的数字,如上标数字、Kharosti数等,即具有 Numerie_Type=Dight 或Numeric_Type=Decimal 特性的字符。
  • isnumeric():如果字符串中至少有一个字符,且所有字符均为数值字符,则返回True,否则False。数值字符就是具有Numerie_Type=Digit、Numerie_Type=Decimal 或Numeric_Type=Numeric特性的字符。
  • isalpha():如果字符串中的所有字符都是字母,并且至少有一个字符,则返回True,否则False。字母字符是指在Unicode字符数据库中定义的Letter的字符。
  • isalnum():如果字符串中的所有字符都是字母或数字,且至少有一个字符,则返回True,否则False。如果c.isalpha()、c.isdecimal()、c.isdigit()或c.isnumeric()之中有一个返回True,则字符c是字母或数字。
  • isspace():如果字符串中只有空白字符,且至少有一个字符则返回True,否则返回False。
  • isprintable():如果字符串中所有字符均可打印或字符串为空,则返回True,否则False。
  • isidentifier():如果字符串是有效标识符,返回True,否则返回False。

isdigit()isdecimal()isnumeric()方法都是用来检测数字,但是也有差异:

  • isdigit()
    True:Unicode数字、全角数字(双字节)、bytes数字(单字节)。
    False:汉字数字、罗马数字、小数。
    Error:无
  • isdecimal()
  • True:Unicode数字、全角数字(双字节)。
    False:汉字数字、罗马数字、小数。
    Error:byte数字(单字节)。
  • isnumeric()

True:Unicode数字、全角数字(双字节)、汉字数字

False:罗马数字、小数。

Error:byte数字(单字节)。

罗马数字:I、II、III、IV、V、VI、VII、VIII、IX、X等;

汉字数字:一、二、三、四、五、六、七、八、九、十、百、千、万、亿、兆、零、壹等。

4.9 填充字符串

  • str.center(width[,filcher]):返回长度为width的字符串,居中显示。使用指定的fillchar填充两边的空位,默认使用ASCII空格符。如果width小于等于len(s),则返回原字符串的副本。
  • str.ljust(width[,filcher]):返回长度为width的字符串,靠左对齐。使用指定的fillchar填充两边的空位,默认使用ASCII空格符。如果width小于等于len(s),则返回原字符串的副本。
  • str.rjust(width[,filcher]):返回长度为width的字符串,靠右对齐。使用指定的fillchar填充两边的空位,默认使用ASCII空格符。如果width小于等于len(s),则返回原字符串的副本。
  • str.zfill(width):返回原字符串的副本,在左边填充ASCII格式的‘0’,使其长度变为width。正负值前缀(‘+’/‘-’)的处理方式是在正负符号之后填充而非在之前。如果width小于等于len(s),则返回原字符串的副本。
s1 = "Python"
print(s1.center(20,"_")) # _______Python_______
print(s1.ljust(20,"_")) # Python______________
print(s1.rjust(20,"_")) # ______________Python

4.10 检索字符串

  • str.count(sub[,start[,end]]):返回子字符串sub在[start,end]范围内非重叠出现的次数。可选参数start和end被解读为切片表示法,默认值为0和字符串的长度len(str)。
  • str.endswith(suffix[,start[,end]]):如果字符串以指定suffix结束,则返回True,否则False。suffix也可以为由多个供查找的后缀构成的元组。如果有可选项start,将从指定位置开始检查,如果有end,将指定位置停止比较。
  • str.startswith(prefix[,start[,end]]):如果字符串以指定prefix开始,则返回True,否则False。preffix也可以为由多个供查找的前缀构成的元组。如果有可选项start,将从指定位置开始检查,如果有end,将指定位置停止比较。
  • str.find(sub[,start[,end]]):返回子字符串sub在str[start:end] 切片内被找到的最小索引。如果sub未被找到则返回-1。
  • str.rfind(sub[,start[,end]]):返回子字符串sub在字符串内被找到的最大(最右)索引。如果sub未被找到则返回-1。
  • str.index(sub[,start[,end]]):类似find(),当找不到sub时引发ValueError异常。
  • str.rindex(sub[,start[,end]]):类似rfind(),当找不到sub时引发ValueError异常。
str ="海水朝朝朝朝朝朝朝落,浮云长长长长长长长消"
print(str.count"长", 11,21)) # 输出为 7
# 检测字符串“海”是否在字符串的开头或结尾 
print(str.startswith("海")) # True
print(str.endswith("海")) # False
# 检素“长”在字符串中的索引位置。
prin(str. find("长") # 在整个字符串中检素,输出为 13
pprint(str. find(”长",14)) # 从下标 14 位置开始检素,输出为 14
print str. Find("长",10,13) # 在下标 10~13 内检素,输出为 -1,没有找到
print(str.rfind("长")) # 在整个字符串中检素,输出为 19
prinu(str.rfind("长",14)) # 从下标 14位留开始检索,输出为 19

5. 格式化样式

5.1 printf 风格字符串

format % values

其中,format 为一个字符串,在format 中的%转换标记符将被替换为零个或多个 values 条目。


如果 format 要求一个单独参数,则values 可以为一个非元组对象;否则,values 必须是一个包含项数与格式字符串中指定的转换符项数相同的元组,或者是一个单独映射对象,如字典。

转换标记符包含两个或更多个字符,并具有以下组成,且必须遵循下面的先后顺序。

%:用于标记转换符的起始。

映射键(可选):由加圆括号的字符序列组成,如(keywordname)。

最小字段宽度(可选):如果指定为*(星号),则实际宽度从 values 元组的下一元素中读取,要转换的对象则为最小字段宽度和可选的精度之后的元素。

精度(可选)。在 .(点号)之后加精度值的形式给出。如果指定为*(星号),则实际精度从 values元组的下一元素中读取,要转换的对象则为精度之后的元素。

长度修饰符 (可选):包括h、1或L,在Python 中可以被忽略。如%1d 等价于%d。

当右边的values 参数为一个字典或其他映射类型时,宇符串中的格式必须包舍加圆括号的映射键,对应%字符之后字典中的每一项。映射键将从映射中选取要格式化的值。例如:

print('%(language)s%(number)02d'%{'language':'Python','number':3}) # Python03
 

格式化输出字符串和整数

str1 = "%.length = %d" % (Python', len(Python'))
print(str1) # 输出为 Python.length =6

格式化输出不同进制数

n = 1000
print("Hex = %x Dec = %d Oct = %o" % (n, n, n)) 
# 输出为 Hex -3c8 Dec = 1000 Oct = 1750

格式化输出浮点数

pi = 3.141592653
print('pi1 = %10.3f' % pi) # pi1 =      3.142
print('pi2 = %.*f' % (3, pi)) # pi2 = 3.142
print('pi3 = %010.3f' % pi) # pi3 = 000003.142
print('pi4 = %-10.3f' % pi) # pi4 = 3.142    
print('pi5 = %+f' % pi) # pi5 = +3.141593

5.2 format 格式化

str.format()通过{}操作符和:辅助指令代替%操作符。

print('{0} (1}'.format('Python', 3.0)) # 输出为 Python 3.0
print('{}{}'format('Python', 3.0)) # 输出为 Python 3.0
print('{1} {0} {1)'.format('Python', 3.0)) # 输出为 3.0 Python 3.0

在字符串中使用台作为格式化操作符。与%操作符不同的是,{}操作符可以通过包含的位置值自定义引用值的位置,也可以重复引用。

print('{name};年龄是{age}岁。'.format(age=18, name='张三')) # 张三年龄是18岁。
l = ['张三',18]
print('{l[0]}年龄是{l[1]}岁。'.format(1))

# 填充与对齐
print('{:>8}'.format('1')# 右边对齐,默认空格填充,总宽度8
print('{:0>8}'.format('1') # 右对齐,0填充,总宽度8
print('{:a<8}'.format('1') # 左对齐,a填充,总宽度8
# 精度与类型f
print('{:2f}'.format(3.1415926))# 输出为 3.14
# 不同进制数字
n = 100
print('{:b}'.format(n)) # 1100100
print('{:d}'.format(n)) # 100
print('{:o}'.format(n)) # 144
print('{:x}'.format(n)) # 64
# 千位分隔符
print('{:,}' format(1234567890)) # 1,234,567,890

5.3 f-strings

在字符串前加上f修饰符,字符串中使用{}包括:表达式;

name = "Python" # 字符串
ver = 3.6 # 浮点数
print( f"{name}-{ver}、{ver+0.1}、{ver+0.2}") # Python-3.6、3.7、3.8000000000000003

注意:特殊格式化修饰符通过冒号与前面的表达式相连,1f表示仅显示1位小数。

相关文章
|
15天前
|
Python
在 Python 中,如何将日期时间类型转换为字符串?
在 Python 中,如何将日期时间类型转换为字符串?
117 64
|
3月前
|
机器学习/深度学习 数据采集 算法
时间序列结构变化分析:Python实现时间序列变化点检测
在时间序列分析和预测中,准确检测结构变化至关重要。新出现的分布模式往往会导致历史数据失去代表性,进而影响基于这些数据训练的模型的有效性。
233 1
|
6天前
|
存储 测试技术 Python
Python 中别再用 ‘+‘ 拼接字符串了!
通过选择合适的字符串拼接方法,可以显著提升 Python 代码的效率和可读性。在实际开发中,根据具体需求和场景选择最佳的方法,避免不必要的性能损失。
27 5
|
10天前
|
Python
使用Python计算字符串的SHA-256散列值
使用Python计算字符串的SHA-256散列值
18 7
|
17天前
|
Python
在 Python 中,如何将字符串中的日期格式转换为日期时间类型?
在 Python 中,如何将字符串中的日期格式转换为日期时间类型?
27 6
|
2月前
|
Python
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
本篇将详细介绍Python中的字符串类型及其常见操作,包括字符串的定义、转义字符的使用、字符串的连接与格式化、字符串的重复和切片、不可变性、编码与解码以及常用内置方法等。通过本篇学习,用户将掌握字符串的操作技巧,并能灵活处理文本数据。
58 1
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
|
3月前
|
机器学习/深度学习 索引 Python
python之序列
python之序列
149 59
|
3月前
|
Python
python获取字符串()里面的字符
在Python中,如果你想获取字符串中括号(比如圆括号`()`、方括号`[]`或花括号`{}`)内的字符,你可以使用正则表达式(通过`re`模块)或者手动编写代码来遍历字符串并检查字符。 这里,我将给出使用正则表达式的一个例子,因为它提供了一种灵活且强大的方式来匹配复杂的字符串模式。 ### 使用正则表达式 正则表达式允许你指定一个模式,Python的`re`模块可以搜索字符串以查找匹配该模式的所有实例。 #### 示例:获取圆括号`()`内的内容 ```python import re def get_content_in_parentheses(s): # 使用正则表达
110 36
|
2月前
|
自然语言处理 Java 数据处理
【速收藏】python字符串操作,你会几个?
【速收藏】python字符串操作,你会几个?
58 7
|
2月前
|
存储 编译器 索引
Python 序列类型(2)
【10月更文挑战第8天】
Python 序列类型(2)