2024.1.20 Python学习笔记7:字符串常见处理函数

字符串常见处理函数

处理字母大小写

  1. capitalize():将字符串首字母大写,其他字母小写;
  2. casefold():将字符串所有字母小写(不仅限于英语);
  3. title():将字符串所有空格后字母,即单词首字母大写,其他字母小写;
  4. swapcase():将字符串所有字母大小写反转;
  5. upper():将字符串所有字母大写;
  6. lower():将字符串所有字母小写(仅限于英语)。
a='I love PYTHON. Python hate me.'
print(a.capitalize())
print(a.casefold())
print(a.title())
print(a.swapcase())
print(a.upper())
"""
输出内容:
I love python. python hate me.
i love python. python hate me.
I Love Python. Python Hate Me.
i LOVE python. pYTHON HATE ME.
I LOVE PYTHON. PYTHON HATE ME.
"""
字符串对齐
  1. center(width,fillchar=''):将字符串使用扩充到width个字符,且原字符串居中;
  2. ljust(width,fillchar=''):将字符串使用扩充到width个字符,且原字符串居左;
  3. rjust(width,fillchar=''):将字符串使用扩充到width个字符,且原字符串居右;
  4. zfill(width):用0填充字符串左侧,使字符串扩充到width个字符。

其中,如果width<=len(string)的话,字符串原样输出。rjust并不是完全挤占zfill应用场所,下面例子可以说明问题。

a='-123'
print('\''+a.center(10)+'\'')
print('\''+a.ljust(-1)+'\'')
print('\''+a.rjust(10,'0')+'\'')
print('\''+a.zfill(10)+'\'')
'''
输出内容:
'   -123   '
'-123'
'000000-123'
'-000000123'
'''

观察可见rjust与zfill的区别。如果字符串首为负号,那么zfill会在负号后面添加0,而rjust不会有这种情况。zfill在一些数据制表的情况下有特殊作用。

字符串查找

  1. count(sub[,start[,end]]):查找字符串中索引从start起到end部分,string字符串出现次数;
  2. find(sub[,start[,end]]):查找字符串中索引从start起到end部分,string字符串从左找,首次出现时第一个字符索引值,若未找到,返回-1;
  3. rfind(sub[,start[,end]]):查找字符串中索引从start起到end部分,string字符串从右找,首次出现时第一个字符索引值,若未找到,返回-1;
  4. index(sub[,start[,end]]):查找字符串中索引从start起到end部分,string字符串从左找,首次出现时第一个字符索引值,若未找到,返回异常;
  5. replace(old,new,count=-1):将字符串中找到的old子字符串转换为new子字符串,替换次数为count,若count=-1,则全部old字符串替换;
  6. translate(table):根据表格table中的替换方法,将字符串对应字符进行替换;表格table可以通过函数maketrans()生成。
a='12233344445'
print(a.count('3',0,5))
#2,为a中'3'在'12233'部分出现次数
print(a.find('44'))
#6,为'44'在a中从左起首次出现时,首字符索引值
print(a.rfind('44'))
#8,为'44'在a中从右起首次出现时,首字符索引值
print(a.index('1',0,3))
#0,为'1'在'122'部分首次出现,a中的索引值
print(a.replace('3','4',2))
#12244344445,将原来a中头两个'3'更新为'4'
table=str.maketrans('12345','67890');
#创建替换表,'12345'中对应各个字符替换为'67890'
print(a.translate(table))
#67788899990

 字符串判断

  1. startswith(prefix[,start[,end]]):判断子字符串prefix是否在字符串中,索引从start起至end部分的起始位置,返回布尔类型;
  2. endswith(prefix[,start[,end]]):判断子字符串prefix是否在字符串中,索引从start起至end部分的结束位置,返回布尔类型;
  3. 注意以上两个函数中,prefix可以使用元组传入多个字符串,此时判断会将多个字符串一一尝试匹配,如果存在字符串符合,同样会返回True;
  4. istitle():判断字符串中是否所有单词都是大写字母开头,且其他字符都为小写;
  5. isupper():判断字符串中是否所有字母都是大写;
  6. islower():判断字符串中是否所有字母都是小写;
  7. isalpha():判断字符串中是否所有字符都是字母;
  8. isspace():判断字符串是否为空白字符串;
  9. isprintable():判断字符串是否所有字符可打印;
  10. isidentifier():判断字符串内容是否可以作为Python合法标识符。
a='12233344445'
print(a.startswith('223',1,5))
#True,'2233'部分是以'223'起始
print(a.endswith('45'))
#True,a中以'45'结束
print(a.startswith(('1','2','3','4')))
#Ture,('1','2','3','4')中'1'为a起始
str_1='I Love Python'
print(str_1.istitle())
#True,str_1中所有单词首字母大写,其余字母小写
print("I LOVE PYTHON".istitle())
#False,"I LOVE PYTHON"中存在除单词首字母以外字母大写
print('ASDFghjkl'.upper().isupper())
#True,原字符串经过upper方法处理后,所有字母大写
#Python中方法从左往右依次调用
print("asdfghjkl123".islower())
#True,以上字符串所有字母都是小写,'123'部分不是字母
print("I love Python".isalpha())
#False,以上字符串存在空格、句点的非字母字符
print("  \n".isspace()) #原字符串组成字符依次为一个Tab、一个空格与一个'\n'
#True,以上字符都属于空白字符串内容
print("i like apple.\n".isprintable())
#False,其中的'\n'属于不可打印字符
print('张三_计算机1903班_Q123456'.isidentifier())
#True,该字符串可以作为Python合法标识符

字符串截取分割

  1. lstrip(char=None):去除字符串char中的字符,从字符串左侧遍历,当出现第一个无法去除的字符时停止;若不提供参数char,则去除空白符;
  2. rstrip(char=None):去除字符串char中的字符,从字符串右侧遍历,当出现第一个无法去除的字符时停止;若不提供参数char,则去除空白符;
  3. strip(char=None):去除字符串char中的字符,从字符串两侧分别遍历,当出现第一个无法去除的字符时该侧停止;若不提供参数char,则去除空白符;
  4. partition(sub):从字符串左侧开始寻找分隔符sub,并将字符串分割为前半部分、分隔符、后半部分,返回元组存储;若未找到,则元组内容依次为原字符串与两个空字符串;
  5. rpartition(sub):从字符串右侧开始寻找分隔符sub,并将字符串分割为前半部分、分隔符、后半部分,返回元组存储;若未找到,则元组内容依次为两个空字符串与原字符串;
  6. split(sep=None,maxsplit=-1):将字符串根据分隔符sep从左往右分割成maxsplit份,返回列表;若sep=None,则根据空字符串分割,若maxsplit=-1则全部分割;
  7. rsplit(sep=None,maxsplit=-1):将字符串根据分隔符sep从右往左分割成maxsplit份,返回列表;若sep=None,则根据空字符串分割,若maxsplit=-1则全部分割;
  8. splitlines(keepends=False):将字符串按行分割(避免不同操作系统之间换行符差别的问题),返回列表;keepends=True时,保留句尾换行符;
  9. join(iterable):使用给定字符串作为分隔符,将可迭代对象中字符串连接成新的字符串(使用的分隔符可以是包括空字符串''在内的多种字符串)。
print('\''+"     去除左侧空白    ".lstrip()+'\'')
#输出'去除左侧空白    ',右侧空白未被去除
print('\''+"    去除右侧空白     ".rstrip()+'\'')
#输出'    去除右侧空白',左侧空白未被去除
print('\''+'   去除  两侧  空白   '.strip()+'\'')
#输出'去除  两侧  空白',中间空白未被去除
print('\''+'1267123458934345'.strip('12345')+'\'')
#输出'671234589','6'到'9'中间的数字1至5未被去除
print('123.456.789'.partition('.'))
#分割成('123', '.', '456.789')
print('123456'.partition('.'))
#输出('123456', '', '')
print('123.456.789'.rpartition('.'))
#分割成('123.456', '.', '789')
print('123456'.rpartition('.'))
#输出('', '', '123456')
print('123 456 789 0'.split(' ',1))
#分割一次' ',输出['123', '456 789 0']
print('1234\n567\n890'.splitlines())
#按行分割,输出['1234', '567', '890']
print('123\r\n4567\n89\r0\n'.splitlines())
#不同操作系统下换行符也不同,split方法不能在多种操作系统下同时作用
#在Linux系统下,换行符为'\n',而Mac系统下换行符为'\r',Windows系统下甚至为'\r\n'
#splitlines方法,多种换行符均可以识别,输出['123', '4567', '89', '0']
print('123\r\n4567\n89\r0\n'.splitlines(True))
#输出['123\r\n', '4567\n', '89\r', '0\n'],换行符保留
print('.'.join(['www','baidu','com']))
#输出www.baidu.com,将各个字符串用'.'连接

字符串格式化

字符串格式化使用format方法,在学习笔记2中有简要介绍。更深入的介绍如下:

字符串对齐

使用{:align,width}实现,align标记对齐方法,width标记字符串宽度。

  1. align='<':强制字符串在可用空间内左对齐;
  2. align='>':强制字符串在可用空间内右对齐(默认);
  3. align='^':强制字符串在可用空间内居中。
print('输出:{1:^10},{2:<10},{0:>10}.'.format(1234,'汉字','Chinese'))
#输出:    汉字    ,Chinese   ,      1234.
#依次为居中对齐、靠左对齐、靠右对齐
 字符填充

使用{:char,align,width},可使可用空间内空余空间使用字符char填充。

如果在数字对齐制表情况下,填充0实现数字对齐制表,需要将-10输出在10个字符可用空间内,输出'0000000-10'不符合要求,则可以通过{:010}实现。注意此方法只对数字有效,处理字符串会报错。

print("输出:{:%<10}".format('python'))
#输出:python%%%%
print("输出:{:010}".format(-10))
#输出:-000000010
数字输出

如果需要输出数字标志正负符号,可通过{:+}实现,此时输出数字会标记正负。

如果需要输出的数字有千分符(,),可以通过{:,}实现,此时输出数字会有千分符划分。下横线同样可以用于千分符划分,使用方法相近。

print("输出:{:+},{:+}".format(250,-1.2))
#输出:+250,-1.2
print("输出:{:,},{:_}".format(10000000,1234567))
#输出:10,000,000,1_234_567

当需要对数字精度处理时,可以:

  1. {:.位数f}:保留小数点后若干位;
  2. {:.位数g}:保留若干位有效数字;
  3. {:.位数}:字符串输出前若干位;
  4. {:.位数}不能用于处理整数。

注意,保留有效数字时,如果没有到达小数位,则会通过科学计数法输出。保留数字时存在四舍五入。

print("输出:{:.2f}".format(3.196))
#输出:3.20
print("输出:{:.2g}".format(3.196))
#输出:3.2
print("输出:{:.3g}".format(3456))
#输出:3.46e+03
print("输出:{:.2}".format('123456'))
#输出:12

可以备注数字输出格式。整数备注方法有如下几种:

  1. b:以二进制输出数字;
  2. c:以Unicode字符形式输出;
  3. d:以十进制输出数字(默认);
  4. o:以八进制输出数字;
  5. x或X:以十六进制输出数字;

如果在以上备注前标注#,则输出时可以说明输出格式。

print("64的二进制:{:b}".format(64))
#64的二进制:1000000
print("49的Unicode字符:{:c}".format(49))#49=0x31
#49的Unicode字符:1
print("64的八进制:{:o}".format(64))
#64的八进制:100
print("64的十六进制:{:#x}".format(64))
#64的十六进制:0x40

对于浮点数,则有以下方式:

  1. e/E:以科学计数法输出数据(默认保留小数点后6位);
  2. f/F:以定点表示法形式输出数据(默认保留小数点后6位,不是数用'nan'/'NAN'表示,无穷用'inf'/'INF'表示);
  3. g/G:小数以定点表示法形式输出,大数以科学计数法形式输出(默认保留6位有效数字);
  4. %:以百分数形式表示(默认保留小数点后6位)。
print("output:{:f}".format(1.23456789))
#output:1.234568
print("output:{:e}".format(123456789))
#output:1.234568e+08
print("output:{:g}".format(1.23456789))
#output:1.23457
print("output:{:g}".format(123456789))
#output:1.23457e+08
print("output:{:.2%}".format(0.037))
#output:3.70%

在有些时候,希望输出数字精度可以自行控制,则可以借助于关键字参数的形式设置输出的值;此外,多种选项的值都可以通过关键字参数设置。

print("output={:.{prec}f}".format(10.0,prec=3))
#output=10.000
print("output={:{fill}{align}{width}.{prec}{type}}"
        .format(10.1234,fill='_',align='^',width=10,prec=3,type='g'))
#output=___10.1___

f-字符串

f-字符串可以更简洁地实现字符串格式化。相较于原来的格式化方法,f-字符串只需要将f/F在字符串前标注,之后即可直接在花括号里面添加变量名等想要输出的内容。

add_string='语法糖'
print(f"f-字符串属于一种{add_string}.")
#f-字符串属于一种语法糖.

而希望通过一定格式输出时,变量名等输出内容写在冒号前,格式则写在冒号之后即可,与上面基本相近。

add_string='语法糖'
print(f"f-字符串属于一种{add_string:->10}.")
#f-字符串属于一种语法糖.
#表示需要有10个字符的自由空间,字符串居右,'-'填充。
print(f"output={3.14*5**2:_^13.2f}")
#output=____78.50____
print(f"{-520:010}")
#-000000520
fill,align,width,prec,type='_','^',10,3,'g'
print(f"output={10.1234:{fill}{align}{width}.{prec}{type}}")
#output=___10.1___

注意f-字符串属于python3.6的产物,在较低级版本机器环境下可能无法识别,大多数情况下format方法更加泛用。 

你可能感兴趣的:(python学习笔记,python,学习,笔记)