Python数字和字符串学习笔记(下)

简介: Python数字和字符串学习笔记

字符串方法


字符串大小写相关的方法


  • capitalize():字符串首字母大写


>>> str='hello world'
>>> str.capitalize()
'Hello world'


  • title():字符串中单词的首字母大写


>>> str.title()
'Hello World'


  • upper():字符串转换成大写


>>> str.upper()
'HELLO WORLD'


  • lower():字符串转换成小写


>>> str.lower()
'hello world'


swapcase():字符串大小写互转


>>> str='HellO wORld'
>>> str.swapcase()
'hELLo WorLD'


字符串排版相关的方法


center():居中对齐


>>> str='hello'
>>> str.center(11)
'   helloo  '
>>> str.center(11,'_')
'___helloo__'


ljust():居左对齐


>>> str.ljust(11,'_')
'helloo_____'
>>> str.ljust(11)
'helloo'


rjust():居右对齐


>>> str.rjust(11)
'     hello'
>>> str.rjust(11,'_')
'_____hello'


expandtabs():修改tab空格的个数


>>> str='hello\tworld'
>>> print (str)
hello   world
>>> str.expandtabs(9)
'hello    world'
>>> str.expandtabs(4)
'hello   world'


zfill():将字符串扩充到指定长度,前面使用0填充


>>> str.zfill(20)
'000000000hello\tworld'
>>> 'sad'.zfill(10)
'0000000sad'


  • strip():删除字符串两边(左边lstrip或右边rstrip)的指定字符(默认为空格和换行符)


>>> str='   hello world   '
>>> str.strip()
'hello world'
>>> str.lstrip()
'hello world   '
>>> str.rstrip()
'   hello world'
>>> str='hello,world'
>>> str.strip('h')
'ello,world'
>>> str.strip('[held]')
'o,wor'


字符串查找相关的方法


  • startswith(prefix[,start[,end]])/endswith(suffix[,start[,end]])  判断是否以特定字符串开头或者结尾


>>> str='hello,world'
>>> str.startswith('hello')
True
>>> str.startswith('hello',0,5)
True
>>> str.startswith('hello',1,5)
False
>>> str.endswith('rld',8)
True
>>> str.endswith('rld',9)
False
>>> str.endswith('rld',8,11)
True


  • count(sub[,start[,end]]):相应字符串在文本中的个数


>>> str='hello,world'
>>> str.count('l')
3
>>> str.count('ll')
1


  • find/rfind():分别从字符串前后开始查找第一个匹配到的字符串的位置,找不到就返回-1


str='hello,world'
>>> str.find('l')
2
>>> str.rfind('l')
9


  • index/rindex():与find方法类似,但是找不到会报错


>>> str.index('l')
2
>>> str.rindex('l')
9
>>> str.index('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> str.find('a')


  • replace(old,new[,count]):替换字符串,count代表替换个数


>>> str.replace('l','L')
'heLLo,worLd'
>>> str.replace('l','L',1)
'heLlo,world'


格式判断相关方法


  • isalpha() :判断是否是字母
  • isdigit():判断是否是数字
  • isalnum():判断是否是数字和字母
  • islower():判断是否有字母,且字母为小写字母
  • isupper():判断是否有字幕,且字母为大写字母
  • isspace():判断是不是只有空格和换行符号
  • istitle():判断字符串每个单词的首字母是否大写
  • isdecimal():判断是不是数字
  • isnumeric():判断是不是数字
  • isidentifier():判断字符能否成为标识符
  • isprintable():判断字符是否全部能打印的


isdigit、isdecimal、isnumeric三者的区别

isdigit()

True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字

False: 汉字数字

Error: 无

isdecimal()

True: Unicode数字,,全角数字(双字节)

False: 罗马数字,汉字数字

Error: byte数字(单字节)

isnumeric()

True: Unicode数字,全角数字(双字节),罗马数字,汉字数字

False: 无

Error: byte数字(单字节)


字符串分隔


  • split([sep[,maxsplit]])/rsplit([sep[,maxsplit]]):分别从左右按照sep字符串分隔,最多分隔maxsplit此,默认无数次


>>> str='asd,fgh,jkl'
>>> str.split(',')
['asd', 'fgh', 'jkl']
>>> str.rsplit(',',1)
['asd,fgh', 'jkl']


  •  splitlines()以\n或者\r或者\n\r分隔


>>> str='asd\nfgh\njkl'
>>> str.splitlines()
['asd', 'fgh', 'jkl']


  • partition(sep):将分隔符也作为一个元素列出来


>>> 'http://www.baidu.com'.partition('://')
('http', '://', 'www.baidu.com')


字符串其他方法


  • join():以特定的分隔符将字符串分隔


>>> str='asdfg'
>>> '-'.join(str)
'a-s-d-f-g'


字符串格式化输出


python字符串格式化输出的三种方式


  1. 使用字符串格式格式化操作符——百分号%
  2. 使用字符串方法 format
  3. 使用 f-strings进行字符串格式化


使用%进行格式化


这种格式化表达式类似于C语言


格式化操作符(%) 说明
s 获取传入对象的str方法的返回值,并将其格式化到指定位置
r 与s一样,但输出方式是repr方式,而不是str
c 整数:将数字转换成其unicode对应的值,10进制范围为 0<=i<=1114111(py27则只支持0-255);字符:将字符添加到指定位置
d 有符号十进制(整数),将整数、浮点数转换成十 进制表示,并将其格式化到指定位置
i 有符号整数
u 无符号整数
o 将整数转换成八 进制表示,并将其格式化到指定位置
x 将整数转换成十六进制表示,并将其格式化到指定位置
X 与x一样,A-F是大写
e 浮点指数,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
E 与e一样,E为大写
f 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
F 浮点数十进制
g 浮点e或f,自动调整将整数、浮点数转换成 浮点型或科学计数法表示
G 浮点E或F,自动调整将整数、浮点数转换成 浮点型或科学计数法表示
% 当字符串中存在格式化标志时,需要用 %%表示一个百分号


注:Python中百分号格式化是不存在自动将整数转换成二进制表示的方式


举例


>>> "%s|%r|%c" %("this is str","this is repr","C")
"this is str|'this is repr'|C"
>>> "%d|%i|%o|%x|%X|" %(3,5,12,13,14)
'3|5|14|d|E|'
>>> "%e|%E|%f|%F|%g|%G" %(1.5E3,1.5e3,13.5,13.5,1.5e13,13.5E15)
'1.500000e+03|1.500000E+03|13.500000|13.500000|1.5e+13|1.35E+16'
>>> "%(string)-10s"%({'string':'1'})
'1 
>>> "%(float)+10.2F"%({'float':3.1})
'     +3.10'
>>> "%(float)-10.2f"%({'float':3.1})
'3.10      '


使用format方法


语法:{}.format(value)


参数:


(value):可以是整数,浮点数,字符串,字符甚至变量。


Returntype:返回一个格式化字符串,其值在占位符位置作为参数传递。


#位置参数
>>> username='wanger'
>>> password=123456
>>> print ("{}'s password is {}".format(username,password))
wanger's password is 123456  
>>> username='wanger'
>>> password=123456
>>> print ("{1}'s password is {0}".format(password,username))
wanger's password is 123456 
#下标参数
>>> si=['KB','MB','GB','TB','PB','EB','ZB','YB']
>>> '1000{0[0]}=1{0[1]}'.format(si)
'1000KB=1MB'
#浮点数精度
>>> '{:.4f}'.format(3.1415926)
'3.1416'
>>> '{:>10.4f}'.format(3.1415926)
'    3.1416'
>>> 'this is a test {t[0]}'.format(t='hello')
'this is a test h'
>>> 'this is a test {t[1]}'.format(t='hello')
'this is a test e'
#使用模块作为参数
>>> import sys
>>> sys.platform
'win32'
>>> "{0.platform}".format(sys)
'win32'
>>> 'my laptop platform is {s}'.format(s=sys.platform)
'my laptop platform is win32'
>>> 'my laptop platform is (s.platform)'.format(s=sys)
'my laptop platform is (s.platform)'
#关键字参数
>>> 'my name is {name} ,age is {age}'.format(name='wanger',age='25')
'my name is wanger ,age is 25


当占位符{}为空时,Python将按顺序替换通过str.format()传递的值。


str.format()方法中存在的值本质上是元组数据类型,元组中包含的每个单独值都可以通过索引号调用,索引号以索引号0开头。


第三段代码的变量si是一个列表,{0}就代表format()方法的第一个参数,那么{0[0]}就代表列表的第一个元素,{0[1]}就代表列表的第二个元素


这个例子说明格式说明符可以通过利用(类似) Python 的语法


访问到对象的元素或属性。这就叫做复合字段名 (compound field names) 。


以下复合字段名都是“ 有效的 ” 。


•  使用列表作为参数,并且通过下标索引来访问其元素(跟上

一例类似)

•  使用字典作为参数,并且通过键来访问其值

•  使用模块作为参数,并且通过名字来访问其变量及函数

•  使用类的实例作为参数,并且通过名字来访问其方法和属性

•  以上方法的任意组合


format_spec参数


表达式:format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]


  • fill ::=  <’any character’>
  • align ::=  “<”‘左对齐’ | “>”‘右对齐’ | “=”‘在数字里,符号左对齐,数字右对齐 | “^”‘居中’
  • sign  ::=  “+” | “-“ | “ “(当sign=’+‘时,即使是正数也会显示符号,-只有为负数的时候才显示负号,为空格时,会在正数前面留下符号位)
  • width ::=  integer  (定义输出的宽度)


fill和align以及后面的width相当于str方法中的center,ljust,rjust


>>> '{:+^15}'.format('start')
'+++++start+++++'
>>> '{:+^15}'.format('end')
'++++++end++++++'
>>> '{:*<15}'.format('end')
'end************'
>>> '{:*>15}'.format('start')
'**********start'
>>> '{:=+20}'.format(10)
'+                 10'
>>> print("{:=10}\n{:=+20}\n{:-^10}\n{:=-13}".format(10,10,'-',-15))
        10
+                 10
-----------
          15


#只有在数字显示里,显示二进制数,八进制数,十六进制数的时候,需要显示前面的0b,0o,0x的时候才会用到


>>> "{0:8b},{0:8o},{0:8x}".format(10)
'    1010,      12,       a'
>>> "{0:b},{0:o},{0:x}".format(10)
'1010,12,a'
>>> ("{0:#8b},{0:#8o},{0:#8x}".format(10))
'  0b1010,    0o12,     0xa'


  • ,符号是表示数字时每三位中间加,


>>> '{:,}'.format(100000000000)
'100,000,000,000'


0是固定宽度前面补0


.precision ::=  integer(精度显示)


>>> '{:010.5}'.format(3.1415926)
'00003.1416'


type        ::=  “b” | “c” | “d” | “e” | “E” | “f” | “F” | “g” | “G” | “n” | “o” | “s” | “x” | “X” | “%”  (跟之前使用%表示的相等)


  - 当为字符时:使用s,默认就是s


  - 当为整数时:b,o,x和X是二进制、八进制、十六进制,c是数字按Unicode转换成字符,d是正常十进制,默认就是d。也可以使用n来代替d


>>> "{0:d},{0:b},{0:o},{0:x},{0:X}".format(10)
'10,1010,12,a,A'


  - 为浮点数时:e和E是指数,f和F是浮点数。g和G是同一的,也可以使用n来代替g, %是显示百分比


>>> "{0:e},{0:F},{0:g},{0:n},{0:%}".format(10.3)
'1.030000e+01,10.300000,10.3,10.3,1030.000000%'


使用f-strings方法进行格式化


f-strings也称为“格式化字符串文字”,f字符串是f在开头有一个字符串文字,其中以 {} 包含的表达式会进行值替换。表达式在运行时进行评估,然后使用format协议进行格式化。其中以 {} 包含的表达式会进行值替换。


特点


  1. 代码简洁,没有多余的引号
  2. 括号{}里面的变量,可以是字符串类型,也可以是整型、浮点型,或者是复杂类型,比如数组、词典等,会自动转换成成字符串形式。
  3. 括号{}里面还可以是函数,比如 f’数组a的长度为:{len(a)}’。一句话,只要是位于 {} 中的,都会当做 python 代码来执行。但里面只能写表达式,不能写执行语句如{a=2}之类的。
  4. f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式,速度非常快


简单举例


>>> name='wanger'
>>> age=25
>>> f"hello,I'm {name},my age {age} "
"hello,I'm wanger,my age 25 "
#也可以使用大写F
>>> F"hello, I'm {name},my age {age} "
"hello, I'm wanger,my age 25 "


当然也可以进行简单的计算


>>> f"{2*3}"
'6'


也可以调用函数


>>> def test(input):
...     return input.lower()
...
>>> name='WangEr'
>>> f"{test(name)} is funny"
'wanger is funny'


还可以选择直接调用方法


>>> name='WangEr'
>>> f"{name.lower()} is funny"
'wanger is funny'


在使用字典的时候。如果要为字典的键使用单引号,请记住确保对包含键的f字符串使用双引号。


comedian = {'name': 'wanger', 'age': 25}
f"The comedian is {comedian['name']}, aged {comedian['age']}."
'The comedian is wanger, aged 25.'


使用字符串的场景


使用多个界定符分隔字符串


split只能使用单一字符串,如果要使用多个分隔符的话,就要用到正则表达式模块了


>>> str='asd,dfg;zxc ert  uio'
>>> import re
>>> re.split(r'[;,\s]\s*',str)
['asd', 'dfg', 'zxc', 'ert', 'uio']


  • []表示里面字符任意匹配。[;, ]表示;或者,或者空格,\s*表示任意个前面字符
  • 字符串开头或结尾匹配
  • 比如要看一个地址是否是http://或者ftp://开头
  • 或者查看文件后缀是不是TXT格式
  • 可以这样查看


>>> url='http://www.baidu.com'
>>> ftp='ftp://www.baidu.com'
>>> url.startswith(('http://','ftp://'))
True
>>> txt='ziyuan.txt'>>> txt.endswith('txt')
True
>>> url[0:7]=="http://" or url[0:6]=="ftp://"
True
>>> txt[7:10]=="txt"
True


  • 用shell通配符
    我们还可以使用shell通配符来检查文件的结尾,这需要用到fnmatch模块
    fnmatch不区分大小写,fnmatchcase是区分大小写的


>>> from fnmatch import fnmatch,fnmatchcase
>>> fnmatch('log.txt','*.txt')
True
>>> fnmatch('log.TXT','*.txt')
True
>>> fnmatchcase('log.TXT','*.txt')
False
>>> fnmatchcase('log.TXT','*.TXT')
True


  • 匹配和搜索特定格式的文本
    普通匹配可以使用find方法,如果是特定格式的话还是会用到正则模块


>>> date1='2018/10/24'
>>> date2='2018/12/21'
>>> date3='2018-12-05'
>>> def isdate(date):
...     if re.match(r'\d+/\d+/\d+',date):
...             print ('match OK')...     
        else:
...             print ('not match')
>>> isdate(date1)
match OK>>> isdate(date2)match OK>>> isdate(date3)
not match在正则模块re中\d表示单个数字,+
表示一个或多个前面的字段
• 搜索和替换特定的文本格式
普通的匹配可以使用replace方法
,如果匹配特定格式,还是要用
正则模块re
>>> import re
>>> date='today is 13/12/2018'
>>> re.sub(r'(\d+)/(\d+)/(\d+)',r'\3-\2-\1',date)
'today is 2018-12-13'
>>> datepat=re.compile(r'(\d+)/(\d+)/(\d+)')   #为了防止每次都要定义匹配模式,可以在这里定义一个匹配的变量,以后匹配直接调用这个变量
>>> datepat.sub(r'\3-\2-\1',date)'today is 2018-12-13'
>>> date='yestory is 12/12/2018,today is 13/12/2018'
>>> datepat.subn(r'\3-\2-\1',date)
('yestory is 2018-12-12,today is 2018-12-13', 2)
\1,\2,\3分别代表前面匹配模式中
的第一个括号匹配到的,第二个括
号匹配到的,第三个括号匹配到的
,使用subn方法可以看到匹配到几次
• 忽略大小写的搜索替换
如果要忽略大小写还是要用到re
模块,需要用到的是re的IGNOR
ECASE方法
>>> import re
>>> re.findall('replace','Replace,replace,REPLACE')
['replace']
>>> re.findall('replace','Replace,replace,REPLACE',flags=re.IGNORECASE)
['Replace', 'replace', 'REPLACE']
>>> str='Replace is the same as REPLACE'
>>> re.sub('replace','WORD',str,flags=re.IGNORECASE)
'WORD is the same as WORD'
相关文章
|
1月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
241 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
140 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
154 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1月前
|
Python
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
本篇将详细介绍Python中的字符串类型及其常见操作,包括字符串的定义、转义字符的使用、字符串的连接与格式化、字符串的重复和切片、不可变性、编码与解码以及常用内置方法等。通过本篇学习,用户将掌握字符串的操作技巧,并能灵活处理文本数据。
55 1
【10月更文挑战第6天】「Mac上学Python 11」基础篇5 - 字符串类型详解
|
1月前
|
自然语言处理 Java 数据处理
【速收藏】python字符串操作,你会几个?
【速收藏】python字符串操作,你会几个?
57 7
|
1月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
67 1
|
1月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
87 1
|
1月前
|
存储 Python
Python学习笔记编程小哥令狐~持续更新、、、 (下)
Python学习笔记编程小哥令狐~持续更新、、、 (下)
33 1
|
1月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
42 0
【免费分享编程笔记】Python学习笔记(二)
|
1月前
|
索引 Python
Excel学习笔记(一):python读写excel,并完成计算平均成绩、成绩等级划分、每个同学分数大于70的次数、找最优成绩
这篇文章是关于如何使用Python读取Excel文件中的学生成绩数据,并进行计算平均成绩、成绩等级划分、统计分数大于70的次数以及找出最优成绩等操作的教程。
64 0
下一篇
无影云桌面