文章目录
写在前面
文章内容为个人学习笔记,学习内容源自“小甲鱼”-《零基础入门学习Python》
1、大小写字母换来换去的方法
>>> test_str = 'I am a Handsome Boy'
# capitalize,返回一个字符串首字母大写,其他变小写的新字符串
>>> test_str.capitalize()
'I am a handsome boy'
# casefold,返回一个所有字符都是小写的新字符串,包括德语、俄语等其他语言的字符
>>> test_str.casefold()
'i am a handsome boy'
# title,返回一个字符串中所有单词首字母大写,其他字母小写的新字符串
>>> test_str.title()
'I Am A Handsome Boy'
# swapcase,返回一个翻转字符串中所有字符的新字符串
>>> test_str.swapcase()
'i AM A hANDSOME bOY'
# upper,返回一个全大写的新字符串
>>> test_str.upper()
'I AM A HANDSOME BOY'
# lower,返回一个所有字符都是小写的新字符串,仅限于英语
>>> test_str.lower()
'i am a handsome boy'
2、左中右对齐,定长填充
# width参数指定输出字符的总长度,如果width小于等于原字符的长度,直接返回原字符。否则,不足的部分使用fillchar进行填充后,输出新字符。
# fillchar默认空格。
>>> test_str = 'Nice!'
>>> test_str.center(4) # 原字符串长度5,width传参4,返回原字符串
'Nice!'
>>> test_str.center(10, '-')
'--Nice!---'
# center(width, fillchar=' '),居中
>>> test_str.center(10)
' Nice! '
# ljust(width, fillchar=' '),左对齐
>>> test_str.ljust(10)
'Nice! '
# rjust(width, fillchar=' '),右对齐
>>> test_str.rjust(10)
' Nice!'
# zfill(width),左对齐,同时右边填充字符0
>>> '9527'.zfill(6)
'009527'
>>> '-9527'.zfill(6) # 负数也能处理
'-09527'
3、字符串查找
>>> test_str = 'I am a Handsome Boy'
# count(sub[, start[, end]]),返回统计被查找字符串出现的次数,可指定起始和结束位置
>>> test_str.count('a')
3
>>> test_str.count('a', 3, len(test_str))
2
# find(sub[, start[, end]]),返回指定字符第一次出现的索引,从左往右
# 找不到,返回“-1”
>>> test_str.find('a')
2
>>> test_str.find('z') # 找不到,返回“-1”
-1
# rfind(sub[, start[, end]]),返回指定字符最后一次出现的索引,反向,从右往左
# 找不到,返回“-1”
>>> test_str.rfind('a')
8
# index(sub[, start[, end]]),同find,区别在于找不到,抛出异常。
>>> test_str.index('z')
Traceback (most recent call last):
File "<pyshell#84>", line 1, in <module>
test_str.index('z')
ValueError: substring not found
# rindex(sub[, start[, end]]),同rfind,区别在于找不到,抛出异常。
>>> test_str.rindex('z')
Traceback (most recent call last):
File "<pyshell#87>", line 1, in <module>
test_str.rindex('z')
ValueError: substring not found
4、替换
# expandtabs(tabsize=8),使用空格替换制表符tab,返回一个新的字符串。
# tabsize指定一个tab被几个空格替换
>>> code = """
print('nice')
print('good')"""
>>> print(code)
print('nice')
print('good')
>>> print(code.expandtabs(4))
print('nice')
print('good')
# replace(old, new[, count]),替换旧的子字符串为新的子字符串,返回一个新字符串
# count为替换的次数,默认值“-1”,全部替换
>>> 'I am a Handsome Boy'.replace(' ', '_')
'I_am_a_Handsome_Boy
>>> 'I am a Handsome Boy'.replace(' ', '_', 2)
'I_am_a Handsome Boy'
# translate(table),返回一个使用转换规则table转换后的新字符串
>>> table = str.maketrans('abcdefg', '1234567') # 创建替换规则table
>>> 'I am a Handsome Boy'.translate(table) # 字母a、d、e匹配成功,分别被替换为1、4、5
'I 1m 1 H1n4som5 Boy'
5、判断和检查
5.1、字符串各种类型检查
# 字符串的判断和检查,返回值都是Bool类型,True/False
# startswith(prefix[, start[, end]]),判断子字符串是否出现字符串的起始位置
# 可指定匹配的起始位置和结束位置
# 待匹配子字符串,可以用元组,传入多个待匹配元素
>>> 'I am a Handsome Boy'.startswith('I')
True
>>> 'I am a Handsome Boy'.startswith('I', 1)
False
>>> 'I am a Handsome Boy'.startswith(('X', 'Y', 'I')) # 元组传入多个待匹配元素
True
# endswith(suffix[, start[, end]]),判断子字符串是否出现字符串的结束位置
# 可指定匹配的起始位置和结束位置
# 待匹配子字符串,可以用元组,传入多个待匹配元素
>>> 'I am a Handsome Boy'.endswith('y')
True
>>> 'I am a Handsome Boy'.endswith('Boy')
True
# isupper(),判断字符串所有字母为大写
>>> 'I am a Handsome Boy'.isupper()
False
>>> 'I am a Handsome Boy'.upper().isupper() # upper()将所有字符转为大写
True
# islower(),判断字符串所有字母为小写
>>> 'I am a Handsome Boy'.islower()
False
>>> 'I am a Handsome Boy'.lower().islower() # lower()将所有字符转为小写
True
# istitle(),检查字符串中所有单词,首字母大写,其他小写
>>> 'I am a Handsome Boy'.istitle()
False
>>> 'I am a Handsome Boy'.title().istitle() # title()将所有单词转为首字母大写
True
# isalpha(),检查字符串,是否仅仅有字母构成
>>> 'I am a Handsome Boy'.isalpha()
False
>>> 'I am a Handsome Boy'.replace(' ', '').isalpha() # replace(' ', '')将所有空格替换为空
True
# isascii()
# isspace(),判断空白字符串
>>> " \n".isspace()
True
>>> "\n\r .......".isspace()
False
>>> "\n\r ".isspace()
True
# isprintable(),检车是否所有字符都是可打印的
>>> 'I am a Handsome Boy'.isprintable()
True
>>> 'I am a Handsome Boy\n'.isprintable() # 转义字符不可打印
False
>>> 'I am a Handsome Boy\r'.isprintable() # 转义字符不可打印
False
>>> num_1 = '12345'
>>> num_2 = '2²'
>>> num_3 = 'ⅠⅡⅢⅣⅤ'
>>> num_4 = '一二三四五'
>>> num_5 = '壹貮叁肆伍'
# isdecimal() # 判断数字,仅阿拉伯数字
>>> num_1.isdecimal()
True
>>> num_2.isdecimal()
False
>>> num_3.isdecimal()
False
>>> num_4.isdecimal()
False
>>> num_5.isdecimal()
False
# isdigit() # 判断数字,支持科学运算数字
>>> num_1.isdigit()
True
>>> num_2.isdigit()
True
>>> num_3.isdigit()
False
>>> num_4.isdigit()
False
>>> num_5.isdigit()
False
# isnumeric() # 支持所有数字,阿拉伯数字、希腊数字、中文
>>> num_1.isnumeric()
True
>>> num_2.isnumeric()
True
>>> num_3.isnumeric()
True
>>> num_4.isnumeric()
True
>>> num_5.isnumeric()
True
# isalnum(),isalpha、isdecimal、isdigit、isnumeric任意一个是True,就返回True
# isidentifier(),判断字符是不是一个合法的python标识符,检查是否符合python的命名规则
5.2、判断字符是否是Python的保留标识符
>>> import keyword
>>> keyword.iskeyword('try')
True
>>> keyword.iskeyword('hello')
False
6、首尾字符串剔除
# strip([chars]),去除两边在chars中匹配到的字符串,默认chars=none,意为去除空格。
>>> ' www.baidu.com '.strip()
'www.baidu.com'
>>> 'www.baidu.com'.strip('abc.')
'www.baidu.com'
>>> 'www.baidu.com'.strip('wcom.')
'baidu'
# lstrip([chars]),去除左侧在chars中匹配到的字符串,默认chars=none,意为去除空格。
>>> ' www.baidu.com '.lstrip()
'www.baidu.com '
>>> 'www.baidu.com'.lstrip('wcom.')
'baidu.com'
>>> ' www.baidu.com '.lstrip(' w')
'.baidu.com '
# rstrip([chars]),去除右侧在chars中匹配到的字符串,默认chars=none,意为去除空格。
>>> ' www.baidu.com '.lstrip()
'www.baidu.com '
>>> 'www.baidu.com'.rstrip('wcom.')
'www.baidu'
# removeprefix(prefix, /),指定要删除的前缀
>>> 'www.baidu.com'.removeprefix('www.')
'baidu.com'
>>> ' www.baidu.com'.removeprefix('www.')
' www.baidu.com'
# removesuffix(suffix, /),指定要删除的后缀
>>> 'www.baidu.com'.removesuffix('u.com')
'www.baid'
>>> 'www.baidu.com '.removesuffix('u.com')
'www.baidu.com '
7、拆分和拼接
7.1、拆分
# 以指定字符对字符串进行切割,返回一个三元素元组
# partition(sep),从左往右
>>> 'www.baidu.com'.partition('b')
('www.', 'b', 'aidu.com')
>>> 'www.baidu.com'.partition('.')
('www', '.', 'baidu.com')
# rpartition(sep),从右往左
>>> 'www.baidu.com'.rpartition('.')
('www.baidu', '.', 'com')
# split(sep=None, maxsplit=-1),从左往右分割,默认使用空格进行分割,返回一个列表
# sep指定分割的字符
# maxsplit指定字符串被分割的次数,默认全部分割
>>> 'www.baidu.com'.split('.')
['www', 'baidu', 'com']
>>> 'www.baidu.com'.split('.', 1)
['www', 'baidu.com']
# rsplit(sep=None, maxsplit=-1),从右往左分割,默认使用空格进行分割,返回一个列表
# sep指定分割的字符
# maxsplit指定字符串被分割的次数,默认全部分割
>>> 'www.baidu.com'.rsplit('.', 1)
['www.baidu', 'com']
# splitlines(keepends=False),将字符串按行进行分割,返回列表
# keepend参数,指示是否保留换行符,默认False不保留换行符
>>> 'hello\nworld\r\nmy\rfirst\ncode!'.splitlines()
['hello', 'world', 'my', 'first', 'code!']
7.2、拼接
# 字符串拼接可以使用“+”运算符,但是当凭借内容非常庞大时,使用join方法会快非常多。
# join(iterable),传参为一个可迭代对象
>>> '.'.join(['www', 'baidu', 'com'])
'www.baidu.com'
>>> '.'.join(('www', 'baidu', 'com'))
'www.baidu.com'
8、格式化字符串
# foemat方法,使用{}在原字符串中进行占位,format传参替换至{}位置
# 单参数
>>> "今年是{}年".format(2022)
'今年是2022年'
>>> "You are a very {} man".format("good")
'You are a very good man'
# 多参数,参数被作为元素对待,使用下标能控制元素出现的位置
>>> "www.{}.com is a {}".format('baidu', 'website')
'www.baidu.com is a website'
>>> "www.{1}.com is a {0}".format('baidu', 'website')
'www.website.com is a baidu'
# 一个参数被多次引用
>>> "{0}{1}{1}".format('小', '姐')
'小姐姐'
# 关键字引用
>>> "hello {x}".format(x='world')
'hello world'
# 格式化选项,格式:{“位置索引”:“对齐方向”“显示宽度”}
# ">",右对齐
# "<",左对齐
# "^",居中对齐
# "=",仅对数字有效,右对齐
# "0",为数字使用0填充,自动感知正负号
>>> "{:^10}".format("hello") # 居中对齐,显示宽度10字符
' hello '
>>> "{1:>10}".format("hello", "world") #第二个参数,右对齐,宽度10字符
' world'
>>> "{:=10}".format(3344)
' 3344'
>>> '{:010}'.format(3344)
'0000003344'
>>> '{:010}'.format(-3344)
'-000003344'
# 在对齐选项前可指定填充字符,默认是空格填充
>>> "{:?>10}".format("hello")
'?????hello'
# 针对数字的格式化
# “+”和“-”,格式化数字的正负
>>> "{:+},{:-}".format(666,-233)
'+666,-233'
# “,”和“_”数字千位分割符,不足千位,分隔符不显示
>>> "{:,},{:_}".format(9527,9527)
'9,527,9_527'
# 浮点数的精度
# 对于“f”或“F”类型的浮点数,限定小数点后显示几位数字
# 对于“g”或“G”类型的浮点数,限定小数点前后一共显示几位数字
# 对于非数字类型,限定最大字段的大小
# 对于整数类型,不允许使用[.precision]选项
>>> "{:.2f}".format(3.1415)
'3.14'
>>> "{:.2g}".format(3.1415)
'3.1'
>>> "{:.6}".format("abcdefg") # 允许显示总字符数量为6,相当于字符串截取
'abcdef'
>>> "{:.2}".format(9527)
Traceback (most recent call last):
File "<pyshell#201>", line 1, in <module>
"{:.2}".format(9527)
ValueError: Precision not allowed in integer format specifier
# 整数显示格式
>>> "{:b}".format(110) # 二进制
'1101110'
>>> "{:c}".format(110) # ACSII码对应字符
'n'
>>> "{:d}".format(110) # 十进制
'110'
>>> "{:o}".format(110) # 八进制
'156'
>>> "{:x}".format(110) # 十六进制
'6e'
>>> "{:#x}".format(110) # 加上“#”修饰,在输出内容中加上进制识别
'0x6e'
# 浮点数格式化
>>> "{:e}".format(3.1415) # 科学计数法
'3.141500e+00'
>>> "{:E}".format(3.1415) # 科学计数法
'3.141500E+00'
>>> "{:f}".format(3.1415)
'3.141500'
>>> "{:g}".format(123456789) # 大数字使用科学计数法
'1.23457e+08'
>>> "{:g}".format(123.456789) # 小数,默认显示6个数字
'123.457'
>>> "{:%}".format(0.55) # 小数转百分数
'55.000000%'
>>> "{:.2%}".format(0.55) # 支持设置小数位数
'55.00%'
# 变量控制格式化类型
>>> "{:{fill}{align}{width}.{prec}{ty}}".format(3.1415, fill='#', align='>', width=10, prec=2, ty='f')
'######3.14'
9、f字符串
# python 3.6版本引入
>>> fill='#'; align='>'; width=10; prec=2; ty='f'
>>> f"{3.1415:{fill}{align}{width}.{prec}{ty}}"
'######3.14'
本文详细介绍了Python中字符串的各种操作,包括大小写转换、对齐填充、查找替换、判断检查、首尾剔除、拆分拼接、格式化字符串以及f-string的使用。通过实例展示了每个方法的功能和用法,是学习Python字符串处理的好资料。

被折叠的 条评论
为什么被折叠?



