字符串-string

本文详细介绍了Python中字符串的各种操作,包括大小写转换、对齐填充、查找替换、判断检查、首尾剔除、拆分拼接、格式化字符串以及f-string的使用。通过实例展示了每个方法的功能和用法,是学习Python字符串处理的好资料。

写在前面

文章内容为个人学习笔记,学习内容源自“小甲鱼”-《零基础入门学习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'
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值