python3基础:字符串

字符串

目录

字符串

1.字符串对象是不可变的

2.用id判断字符串的地址

3.字符串的两种类型:str和bytes

4.元字符r/R:表示后面的字符不需要转义

​​​​​​​5.换行和转义

​​​​​​​6.字符串格式化

6.1%格式化输出:

​​​​​​​6.2模板格式化

扫描二维码关注公众号,回复: 3608934 查看本文章

7.字符串常用方法:

7.1  strip()/lstrip()/rstrip():去掉空白字符

​​​​​​​7.2  upper()/lower()/swapcase():大小写转换及互换

​​​​​​​7.3  capitalize():将第1个单词首字母大写

​​​​​​​7.4  title():将所有单词首字母大写

​​​​​​​7.5  ljust()/rjust()/center():左、右、居中对齐

​​​​​​​7.6  zfill():填充

​​​​​​​7.7  find()/rfind():查找子字符串的位置

​​​​​​​7.8  index()/rindex():查找子字符串的位置

​​​​​​​7.9  replace()/expandtabs():替换字符串的指定内容

​​​​​​​7.10  split()/rsplit()/splitlines():默认用空白字符切割

​​​​​​​7.11  join():字符串连接

​​​​​​​7.12  startswith()/endswith()/in:开头、结尾是否存在

​​​​​​​7.13  isalpha():是否全部为字母

​​​​​​​7.14  isalnum():是否为数字或字母

​​​​​​​7.15  isdigit():是否全部为数字

​​​​​​​7.16   isspace():是否为空格

​​​​​​​7.17  islower()/isupper()是否为大写或小写

​​​​​​​7.18  istitle():

7.19  maketrans()/translate():字符串映射

​​​​​​​7.20  字符的编码和解码

​​​​​​​​​​​​​​7.21  chr/ord:字符和ascii码转换

​​​​​​​​​​​​​​7.22  count():统计字符中元素出现的个数

​​​​​​​​​​​​​​7.23  +操作符效率不高,可以用以下方法代替:

​​​​​​​​​​​​​​7.24  string模块


​​​​​​​

1.字符串对象是不可变的

字符串是不可变的

>>> s1="a"

>>> id(s1)

34344888

>>> s1+="b"

>>> id(s1)

38588912

>>> 'a'=='a'

True

>>> 'a' in 'abc'

True

>>> 'a'=='b'

False

>>> 'a'!='b'

True

>>> 'a' is 'a'

True

>>> 'a' is not 'a'

False

 

2.用id判断字符串的地址

字符串值一样的在内存中是同一个地址

>>> a='a'+'b'

>>> id(a)

2348771931616

>>> id('ab')

2348771931616

>>>

3.字符串的两种类型:str和bytes

只要不是在内存中使用时全部都是bytes类型

>>> s = "abc"

>>> type(s)

<class 'str'>

>>> s = "abc".encode("utf-8")

>>> type(s)#用于网络传输

<class 'bytes'>

 

不能直接将中文定义为bytes类型

>>> s = b'aaaa'

>>> type(s)

<class 'bytes'>

>>> s= b'中国'

  File "<stdin>", line 1

SyntaxError: bytes can only contain ASCII literal characters.

>>> s = '中国'.encode('utf-8')

>>> s = '中国'.encode()

>>> import sys

>>> sys.getdefaultencoding()#判断默认的编码

'utf-8'

 

​​​​​​​4.元字符r/R:表示后面的字符不需要转义

>>> print('1\n2')

1

2

>>> print(r'1\n2')

1\n2

>>> print(R'1\2')

1\2

>>> print('1\2')

1

>>> print('1\\2')#转义

1\2

>>>

 

​​​​​​​5.换行和转义

转义字符

描述

\(在行尾时)

续行符,也就是多行语句符

\\

反斜杠符号

\’

单引号

\"

双引号

\a

响铃

\b

退格(Backspace)

\e

转义

\000

(不可见字符)

\n

换行(不可见字符)

\v

纵向制表符(不可见字符)

\t

横向制表符(不可见字符)

\r

回车(不可见字符)

\f

换页(不可见字符)

\oyy

八进制数yy代表的字符,例如:\o12代表换行

\xyy

十进制数yy代表的字符,例如:\x0a代表换行

\other

其它的字符以普通格式输出

 

不同平台下的换行符:

window:

>>> import os

>>> os.linesep

'\r\n'

>>>

 

linu/mac:

>>> import os

>>> os.linesep

'\n'

 

打印单引号

>>> print("'")

'

>>> print('\'')

'

​​​​​​​6.字符串格式化

6.1%格式化输出:

符号

描述

%c

%c 格式化字符及其ASCII码

%s

%s 格式化字符串

%d

%d 格式化整数

%u

%u 格式化无符号整型,和%d一致

%o

%o 格式化无符号八进制数

%x

%x 格式化无符号十六进制数

%X

%X 格式化无符号十六进制数(大写)

%f

格式化浮点数,可指定小数点后的位数,默认保留小数点后6位

%e

%e 用科学计数法格式化浮点数

%E

%E 作用同%e,用科学计数法格式化浮点数

%g

%g %f 和%e的简写

%G

%G %f 和 %E的简写

%p

%p 用十六进制数格式化变量的地址

 

>>> '%s=%s'%(1,2)

'1=2'

>>> '%d=%d'%(1,2)

'1=2'

>>> '%d=%d'%('a',2)#不是数字会报错

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: %d format: a number is required, not str

 

>>> '%.2f=%.2f'%(1,2)#保留小数点后两位

'1.00=2.00'

>>> '%.2f=%.2f'%(1.9999,2.5555) #会四舍五入

'2.00=2.56'

 

name = 'ruby'
#格式化字符串
print ("My name is %s and  \ weight is %d kg" %(name, 21))

 

​​​​​​​6.2模板格式化

>>> from string import Template

>>> s = Template('There are ${key1} ${key2} Quotations Symbols')

>>> print (s.substitute(key2='Python', key1=3))

There are 3 Python Quotations Symbols

 

7.字符串常用方法:

7.1  strip()/lstrip()/rstrip():去掉空白字符

用法:S.strip([chars])

作用:去掉字符串左右的空白字符(\r、\t、\n、\f、空格),并返回处理后的结果,原始的字符串并未改变

说明:不带参数的strip()函数,表示把S中前后所有的空白字符全部去掉,包 括’\n’ , ‘\t’ , ‘\r’ , ’ ’ 等不可见字符串,可以理解为把S前后空白字符串替换为None;带参数的strip()函数表示将S前后指定字符串chars去掉。

 

lstrip()和rstrip()分别为去除左侧或右侧的空白字符

 

>>> "****abc******".strip("*")

'abc'

>>> "****abc******".strip("*#")#里面有的都可以去除

'abc'

>>> "###****abc******####".strip("*#")

'abc'

>>> "###*** *abc******####".rstrip('*#')

'###*** *abc'

>>> "###*** *abc******####".lstrip('*#')

' *abc******####'

>>> "   \t\nabc         ".strip()
'abc'
>>> "   \t\nabc         ".lstrip()
'abc  \t'
>>> "   \t\nabc         ".rstrip()
'  \t\t\nabc'

 

''.join([chr(i) for i in range(97,123)])#快速的生成全部的小写字母

 

​​​​​​​7.2  upper()/lower()/swapcase():大小写转换及互

>>> 'aC'.upper()

'AC'

>>> 'aC'.lower()

'ac'

>>> '1'.lower()#数字也可以执行lower或upper,不过没什么意义

'1'

>>> 'aC'.swapcase()

'Ac'

>>> "abc bcd".swapcase()

'ABC BCD'

>>> "Bbc bCD".swapcase()

'bBC Bcd'

 

​​​​​​​7.3  capitalize():将第1个单词首字母大写

>>> 'and python'.capitalize()

'And python'

 

​​​​​​​7.4  title():将所有单词首字母大写

>>> "abc bcd".title()
'Abc Bcd'

>>> string.capwords("abc bcd")

'Abc Bcd'

注意:capwords和title的作用相同,只不过在string模块中

​​​​​​​7.5  ljust()/rjust()/center():左、右、居中对齐

s.ljust(width,[fillchar])

作用:输出width个字符,S左对齐,不足部分用fillchar填充,默认为空格。

>>> 'abc'.ljust(10)

'abc       '

>>> 'abc'.rjust(10)

'       abc'

>>> 'abc'.center(10)

'   abc    '

>>>

 

ljust()、rjust()、center()

>>> "abc".ljust(10)

'abc       '

>>> "abc".ljust(10,"*")

'abc*******'

>>> "abc".rjust(10,"*")

'*******abc'

>>> "abc".center(10,"*")

'***abc****'

>>> "abc".center(10,"**")#只能是一个字符

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: The fill character must be exactly one character long

>>>

所有的标点符号

>>> import string

>>> string.punctuation

'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

 

去掉字符串中的标点:

list(map(lambda x:x.strip(string.punctuation),"I am a boy, you r a girl! yes

!".split()))

 

​​​​​​​7.6  zfill():填充

用法:S.zfill(width)

作用:把S变成width长,并在右对齐,不足部分用0补足

 

>>> '123'.zfill(10)

'0000000123'

>>> '1234'.zfill(1)

'1234'

 

​​​​​​​7.7  find()/rfind():查找子字符串的位置

在指定字符串范围内查找子字符串第一次出现的位置

用法:s.find(substr, [start, [end]]) /s.rfind(substr, [start, [end]])

作用:返回s中出现substr的第一个字母的标号,如果s中没有substr则返回 -1。start和end作用就相当于在s[start:end]中搜索 (注意是开区间)

 

>>> '1234'.find('5')

-1

>>> '1234'.find('3')

2

>>> '1234'.find('3',0)

2

>>> '1234'.find('3',0,1)

-1

>>> '1234'.find('3',3)

-1

>>> '123334'.find('3',2)

2

>>> '1234'.find('4',1,3)#开区间

-1

>>> '4234'.rfind('4')#从右侧开始查找

3

 

​​​​​​​7.8  index()/rindex():查找子字符串的位置

可在指定字符串范围内查找子字符串出现的位置,找不到则返回错误

用法:s.index(substr, [start, [end]])/s.rindex(substr, [start, [end]])#开区间

作用:与find()相同,只是在s中没有substr时,会返回一个运行时错误

>>> '1234'.index('3')

2

>>> '1234'.index('5')#运行时错误

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: substring not found

 

​​​​​​​7.9  replace()/expandtabs():替换字符串的指定内容

用法:s.replace(oldstr, newstr, [count])

作用:把s中的oldstar替换为newstr,count 为替换次数。还有 一些函数进行特殊字符的替换

>>> "abca".replace('bc','xxxx')

'axxxxa'

>>> "abca".replace('a','xxxx')

'xxxxbcxxxx'

>>> "abca".replace('a','xxxx',1)

'xxxxbca'

>>> "abc def ane 222".replace(' ','') #相当于删除空格

'abcdefane222'

>>>

 

expandtabs()

用法:s.expandtabs([tabsize])

作用:将tab替换为指定的空格数量,把s中的tab字符替换为空格,每个tab替换为tabsize个空格,默认是8个

>>> '1  2               3'.expandtabs(1)

'1 2  3'

>>> '1  2               3'.expandtabs()

'1       2               3'

 

​​​​​​​7.10  split()/rsplit()/splitlines():默认用空白字符切割

用法:s.split([sep, [maxsplit]])

作用:以sep为分隔符,把S分成一个list,maxsplit表示分割的次

数。默认的分割符为空白字符

>>> 'a b \nd\re'.split()

['a', 'b', 'd', 'e']

>>> 'a*b*c*d**E'.split('*')

['a', 'b', 'c', 'd', '', 'E']

>>> 'a*b*c*d**E'.split('*',1)

['a', 'b*c*d**E']

>>> 'a*b*c*d**E'.rsplit('*',1)

['a*b*c*d*', 'E']

 

splitlines():

用法:s.splitlines([keepends])

作用:按照行分隔符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。

>>> s='1\n2\n'

>>> print (s.splitlines(True))

['1\n', '2\n']

>>> print (s.splitlines())

['1', '2']

>>> print (s.splitlines(1))#按行分隔符分隔,且保留行分隔符

['1\n', '2\n']

 

​​​​​​​7.11  join():字符串连接

将列表/元组拼接为字符串,列表/元组中的必须为字符

>>> '*'.join([1,2,3])#不是字符会报错

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: sequence item 0: expected str instance, int found

>>> '*'.join(['1','2','3'])

'1*2*3'

>>> '*'.join(('1','2','3'))#也可以是元组

'1*2*3'

​​​​​​​7.12  startswith()/endswith()/in:开头、结尾是否存在

判断字符串是否以某个字符串为开头或结尾

>>> "abc".startswith("a")

True

>>> "abc".endswith("c")

True

>>> "abc".startswith("c")

False

>>> "abc".endswith("a")

False

>>> 'a' in 'abc'

True

>>> 'a' is 'a'

True

>>> 'a'=='a'

True

>>> 'a'!='a'

False

>>>

​​​​​​​7.13  isalpha():是否全部为字母

作用:如果字符串中所有的字符都是由字母组成,并且至少有一个字符,返回True,否则返False。

>>> "abc".isalpha()

True

>>> "abc1".isalpha()

False

​​​​​​​7.14  isalnum():是否为数字或字母

作用:如果字符串中所有的字符都是由数字或字母组成,并且至少有一个字符,返回True,否则返False。

>>> 'abcd'.isalnum()

True

>>> '1'.isalnum()

True

>>> '1sdns2'.isalnum()

True

>>> '1 2'.isalnum()

False

​​​​​​​7.15  isdigit():是否全部为数字

作用:如果字符串中所有的字符都是由数字组成,并且至少有一个字符,返回True,否则返False。

>>> "abc1".isdigit()

False

>>> "341".isdigit()

True

>>> "31.25".isdigit()#有小数点不行

False

 

​​​​​​​7.16   isspace():是否为空格

作用:如果字符串中所有的字符都是由空格组成,并且至少有一个字符,返回True,否则返False。

>>> ''.isspace()

False

>>> '   '.isspace()

True

 

​​​​​​​7.17  islower()/isupper()是否为大写或小写

>>> '13abc'.islower()

True

>>> '13ASD'.isupper()#数字会忽略

True

 

​​​​​​​7.18  istitle():

作用:检测字符串中所有的单词首字母是否为大写字母,其他为小写字母,并且z字符串中至少有一个字母,则返回True,否则返回False。

>>> 'Apple is good'.istitle()

False

>>> 'Apple Is Good'.istitle()

True

>>> 'A'.istitle()

True

>>> "Today Is 21 Fine Day".istitle()

True

>>>​​​​​​​

7.19  maketrans()/translate():字符串映射

用法:str.maketrans(from, to)

作用:返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。

 

用法:s.translate(table[,deletechars])

作用:使用上面的函数产后的翻译表,把s进行翻译,并把deletechars中有的字符删掉。需要注意的是,s必须为字节字符串,unicode字符串不支持 deletechars参数

 

>>> map = str.maketrans('123', 'abc')

>>> s = '54321123789'

>>> print (s.translate(map))

54cbaabc789

>>> print (s.translate(map,'123'))#unicode字符串不支持删除

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: translate() takes exactly one argument (2 given)

 

>>> t=bytes.maketrans(b'abc',b'ABC')

>>> print (b'abc123'.translate(t,b"123"))#必须是bytes字符串才能删除

b'ABC'

>>> print (b'abc321'.translate(t,b"123"))

b'ABC'

 

​​​​​​​7.20  字符的编码和解码

>>> '中国'.encode('gbk')

b'\xd6\xd0\xb9\xfa'

>>> '中国'.encode('gbk').decode('gbk')

'中国'

>>> import chardet

>>> chardet.detect('中国人民从此富裕起来了'.encode('gbk'))

{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}

>>> "中国".encode("gbk")
b'\xd6\xd0\xb9\xfa'
>>> s = b'\xd6\xd0\xb9\xfa'

>>> s   #直接打印输出的还是

b'\xd6\xd0\xb9\xfa'

>>> s.decode('gbk')

'中国'

 

 

>>> import base64

>>> encodestr =  base64.b64encode(b'I love you')

>>> print(encodestr)

b'SSBsb3ZlIHlvdQ=='

>>> print(base64.b64decode(encodestr))

b'I love you'

 

​​​​​​​​​​​​​​7.21  chr/ord:字符和ascii码转换

py2只能是ascii码,py3可以是中文,但是只能是一个

>>> ord('中')

20013

>>> chr(20013)

'中'

中文的ascii码:

>>> s = '中'

>>> repr(s)

"'中'"

>>> ord(s)

20013

>>> chr(10015)

'✟'

>>> chr(10016)

'✠'

>>> chr(20016)

'丰'

>>> chr(20015)

'丯'

>>> chr(20017)

'丱'

>>>

 

​​​​​​​​​​​​​​7.22  count():统计字符中元素出现的个数

用法:s.count(substr, [start, [end]])

作用:计算substr在s[start, [end]]中出现的次数

>>> 'abddddddnalendd'.count('d')

8

>>> 'abddddddnalendd'.count('a')

2

>>> s = 'boy boy boy'

>>> s.count('b',3)

2

>>> s.count('b',3,6)

1

 

​​​​​​​​​​​​​​7.23  +操作符效率不高,可以用以下方法代替:

join()或format()

join():

>>> ''.join(['a','b'])

'ab'

format:

>>> 'abc{}'.format('x')

'abcx'

>>> 'abc{1}{0}'.format('x','y')

'abcyx'

 

​​​​​​​​​​​​​​7.24  string模块

>>> import string

>>> string.ascii_lowercase

'abcdefghijklmnopqrstuvwxyz'

>>> string.ascii_uppercase

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

>>> string.punctuation

'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

>>> string.ascii_letters

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

>>> string.digits

'0123456789'

猜你喜欢

转载自blog.csdn.net/kongsuhongbaby/article/details/82994660