字符串是最常用的知识点,但一般常用的方法也就那么几个,这里列出的分为常用的一下方法和不太常用的一些方法。
具体情况要看自己的使用情况,不同的人使用频度可能不一样,具体看自己怎么理解
目前已知的 python3 标示字符串的方法有如下几种:
1. 单引号 '
2. 双引号 "
3. 三引号 ''' 或 """
4. 带前缀 r 或 R
5. 带前缀 f 或 F (3.7+)
1 和 2 单双引号的区别目前还不太清楚,感觉基本没有区别,
不过 python 支持混合使用,但是开始和结束必须保持一致。例如:
'测试字符串','混合 "双引号" 字符串',"混合 '单引号' 字符串"
3 和 4 是用于显示原始字符串,及字符串内带的格式不会被转换,例如 换行符 \t 等
5 是 3.7 版本出的模板字符串表示方法,可以直接替换内部变量名为对应的值,例如
" 你的名字:{name}"
会将 name 的值直接替换到 {name}
的位置
replace(old, new,count=None) 替换方法,用指定的新字符串替换旧的字符串,第三个参数是 `count` 是可选值,替换次数,默认是全量替换
find(str,beg=0,end=len(str)) 查找指定的字符串,返回查找到的位置,默认从 0 开始查找,查找失败时返回 -1
rfind(str, beg=0,end=len(string)) 类似 find 方法,不过是从右边开始查找
split(sep=None, maxsplit=-1) 按照指定的字符串拆分,`maxsplit` 拆分次数,默认值 -1 表示不限制 ,返回列表。常见用法如 英文通过空格拆分词等
strip(chars=None) 删除字符串开始和结束位置的指定字符,默认是删除空字符,还有两个类似方法如下
lstrip(chars=None) 类似 strip 方法,不过只删除字符串左边的指定字符
rstrip((chars=None) 类似 strip 方法,不过只删除字符串右边的指定字符
capitalize() 字符串首字母大写(中文无效)
title() 字符串单词首字母大写
upper() 字符串所有字母全大写
lower() 字符串所有字母全小写
swapcase() 字符串字母大小写反转,即大写转换为小写,小写转换为大写
center(width , fillchar=None) 指定字符串的宽度并居中显示,剩余的使用指定字符填充剩余长度,使内容居中显示
count(str,beg=0,end=len(str)) 统计指定字符片段出现的次数
startswith(str, beg=0,end=len(str)) 判断字符串是否以指定的字符开始(常用于协议判断等)
endswith(str,beg=0,end=len(str)) 判断字符串是否是以指定的字符串结尾(一般用于文件类型判断等)
isalnum() 判断字符串中是否至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
类似正则表达式 /(A-Za-z\d)+/
isalpha() 判断字符串至少有一个字符并且所有字符都是字母(仅包含A-Z a-z)则返回True,否则返回False
类似正则表达式 /(A-Za-z)+/
isdigit() 检测字符串是否仅包含数字(小数位 . 和 符号 +/- 都不行)
类似正则表达式 /\d+/
islower() 检测字符串是否均为小写字母
isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False (没有发现与 `isdigit` 有什么区别)
isspace() 检测字符串中所有字符是否均为空白字符
istitle() 判断字符串中单词首字母是否大写
isupper() 判断字符串是否都是大写
isdecimal() 判断字符串是否只包含十进制数字
这些方法都比较简单,而且 api 列得也比较详细,感觉也不需要举例说明了。
index(str,beg=0,end=len(str)) 同 find 方法,不过唯一不同的是如果查找失败了,会抛出 ValueError 而不是返回 -1
ljust(width,fillchar=None) 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格
rjust(width,fillchar=None) 返回一个原字符串右对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格
zfill(width) 返回长度为 width 的字符串,原字符串右对齐,前面填充0
rindex( str, beg=0, end=len(str)) 查找字符串片段,同 index ,不过是从右边开始查找
expandtabs(tabsize=8) 替换字符串中的制表符,默认使用 8 个空格替换制表符(一般是 \t)
splitlines(keepends=None) 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,否则则保留换行符
translate(table,deletechars="") 根据 str 给出的表(包含256个字符)转换为 string 的字符,要过滤掉的字符放在 deletechars 参数中
可以了解,也比较简单,可能部分方法也比较常用
len(string) 获取字符串长度
format(*args, **kwargs) {} ,替换通配符,内部可以包含数字或参数名称,
max(str) 返回字符串 str 中最大的字母
min(str) 返回字符串 str 中最小的字母
其他的都比较简单,单看方法基本都没啥问题。
主要讲讲 format 方法 实际上是在内部是一个 Formatter 类实现的 format 方法,比较强大
# 空占位符
testStr = "test message {}"
print(testStr.format(", 空占位符")) # test message , 空占位符
# 数字占位符
testStr1 = "test message {0}"
print(testStr1.format(", 数字占位符 0 ")) # test message , 数字占位符 0
# 多个空占位符
testStr2 = "test message {} {}"
print(testStr2.format(", 第一个空占位符 ", ", 第二个空占位符 ")) # test message , 第一个空占位符 , 第二个空占位符
# 多数字占位符
testStr3 = "test message {0}{1}{0}"
print(testStr3.format(", 数字占位符 0 ", ", 数字占位符 1 ")) # test message , 数字占位符 0 , 数字占位符 1 , 数字占位符 0
# 变量(形参)名占位符
testStr4 = "test message {addMsg}"
print(testStr4.format(addMsg=', assMsg 名称占位符')) # test message , assMsg 名称占位符
# 集合类占位符
user = {
'name': 'python',
'age': 29
}
testStr5 = "{name} have {age} years old!"
print(testStr5.format(**user)) # python have 29 years old!
# set 集合,参数如果是整体匹配,必须以数字 0 开始,与内部实现机制有关
color = ('white', 'black')
data = ("set 测试1", "set 测试1")
testStr6 = " set format test {0[0]} {0[1]} | {1[0]} {1[1]}" # set format test white black | set 测试1 set 测试1
print(testStr6.format(color, data))
# 对齐文本并指定宽度,类似 MarkDown 语法
# 左对齐
'{:<30}'.format('left aligned') # 'left aligned '
# 右对齐 :>30 居中对齐 :^30
# 居中对齐并使用 * 填充剩余空位
'{:*^30}'.format('centered') #'***********centered***********'
# 显示浮点数
'{:+f}; {:+f}'.format(3.14, -3.14) # '+3.140000; -3.140000'
# 指定小数位
'{:+1.5f}; {:+.3f}'.format(3.14, -3.14) # '+3.140000; -3.140'
# 默认格式 {:+/-整数位.小数位f} 即 符号,整数长度(超过忽略),.(小数点),小数位(超过截取指定长度)
# 进制转换
"int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42) # 'int: 42; hex: 2a; oct: 52; bin: 101010'
# 带前缀的进制转换
"int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42) # 'int: 42; hex: 0x2a; oct: 0o52; bin: 0b101010'
# 英式数据格式化展示
'{:,}'.format(1234567890) # '1,234,567,890'
# 百分比保留指定小数位
'100/3 = {:.2%}'.format(100 / 3) # 10/3 = 3333.33%
print('10/3 = {:.2%}'.format(100 / 3))
# 时间格式化
import datetime
'{:%Y-%m-%d %H:%M:%S}'.format(datetime.datetime(2020, 7, 4, 12, 15, 58)) # '2020-07-04 12:15:58'
# 其他复杂嵌套等
%c 单个字符串
%d 十进制整数
%o 八进制整数
%s 字符串
%x 十六进制的整数,其中的字母小写
%X 十六进制的整数,其中的字母大写
这个比较简单,将指定的字符替换为指定的格式,可以自己试试,主要是数字进制类,底层是通过 format 实现的
is 判断是否是同一个对象,比较对象 id 值
== 判断是否相同,比较对象值
str1 = 'test'
# 普通拼接还是同一个内存地址,只能这么操作了。拼接有的时候会是不同地址
str2 = str1[:2] + 'st'
print(str1 == str2)
print(str1 is str2)
print("str1 id = " , id(str1))
print("str2 id = " , id(str2))
结果如下:
True
False
str1 id = 1454228727824
str2 id = 1454228699936