第四弹 python的数据类型 之 字符串 string

简介

是python中最常用的数据类型;通过引号('或")包裹; 可以通过`\`来进行转义;字符串是不可变的;一旦创建,就不能在改变它

 定义字符串

通过引号定义

# 1. 单引号:单引号内所有的空白都会保留
'hello python'

# 2. 双引号:同单引号
"hello python"

# 三引号:可以创建一个多行的字符串;在其内可以使用单引号和双引号
"""
Python is an easy to learn, powerful programming language. 
It has efficient high-level data structures and a simple but effective approach to object-oriented programming. 
Python’s elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language for scripting and rapid application development in many areas on most platforms.
"""

特殊字符转义

如果字符串包含特殊字符,我们可以通过 反斜杠(\) 和 原始字符(r) 来转义;

反斜杠:\

  1. 在单引号中使用单引号、在双引号中使用双引号必须使用反斜杠;
  2. 单引号或双引号创建字符需要换行时;
  3. 在代码行过长,需要换行时;
# 第一种
"is\"t"
'is\'t'

# 第二种
"Python is an easy to learn, \
powerful programming language."

# 第三种
if name == 'zs' and age == 10 and \
   sex == '男':
    print('=======')

原始字符:r

  1. 用于字符串中包含不需要特殊处理的字符时;如:包含`\n`、`\`、`\t`等

r'D:\name'

字符串拼接

 可以有以下几种方式实现字符串拼接操作:

第一种:+:合并;仅能合并为字符串类型的

'hello' + ' ' + 'python'
# 'hello python'

第二种:*:重复;

"name " * 3 
# 'name name name '

第三种:相邻的两个或多个自动合并

'hello'    ' python'
# 'hello python'

print('hello', 'python')
# hello python

 第四种:格式化方式;

1. %:占位符格式化;

# %s:字符串占位符
"%s %s" % ('hello', 'python')
# 'hello python'

# %d:整数
"%d age" % 5

# %f:浮点占位符
"%f 利息" % 0.3
# '0.300000 利息'
# 如果想要精确位数,则需要:%.xf
"%.2f 利息" % 0.3333
# '0.33 利息'

2. format:格式化字符串函数; 将值转化为格式化后的形式;

"{h} {p}".format(h='hello', p='python')
"{h} {p}".format(**{'h': 'hello', 'p': 'python'})
# 'hello python'

"{} {}".format('hello', 'python')
# 'hello python'

"{0} {2} {1}".format('早上', '中午', '下午')
# '早上 下午 中午'

第五种:f-string:格式化字符串字面值;

格式:f'xxxx{name}'

只需要在字符串前添加 f 前缀;并用花括号包裹需要替换的变量即可;它们在运行时会被求值,然后使用format进行格式化;

name = 'zhangsan'
f'he said his name is {name}'
# 'he said his name is zhangsan'

# !r: 调用repr()
f'he said his name is {name!r}'
# '"he said his name is 'zhangsan'"

第六种:join()

格式:str.join(iterable)

返回一个由 iterable 中的字符串拼接而成的字符串。如果 iterable 中存在任何非字符串值包括 bytes 对象则会引发 TypeError。 调用该方法的字符串将作为元素之间的分隔。

", ".join(['1', '2', '4', '8', '16'])
# '1, 2, 4, 8, 16'

字符串索引访问

字符串支持索引访问字符,第一个字符的索引为0。最后一个为-1;当字符超出索引位置时,会引发“IndexError: string index out of range”异常;

w = "hello python"

w[0]
# 'h'

w[-1]
# 'n'

字符串切片

除了索引,字符串还支持切片;切片遵循前闭后开原则;若切片索引越界,则返回空字符串,并不会触发异常

w = "python"

w[0:3] # 区间索引为前闭后开,即[0: 3] -> [0, 3) -> [0, 1, 2]
# 'pyt'

w[:2]
# 'py'

w[3:]
# 'hon'

w[:]
# 'python'

w[10:]
# ''

'''
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
  0   1   2   3   4   5  
 -6  -5  -4  -3  -2  -1
'''

字符串函数

1. 首字母大写,其余小写

格式:

str.capitalize()

返回原字符串副本,其首字母大写,其余小写;

例子:

"test".capitalize()
# Tesst

2. 消除大小写字符串

格式:

str.casefold()

返回原字符串消除大小写的副本。消除大小写字符串可用于忽略大小写的匹配

例子:

"Test Python".casefold()  # test python

3. 字符串对齐

3.1 居中对齐

格式:

str.center(width[, fillchar])

字符串居中对齐,且返回长度为 width 的字符串,如果width小于等于len(s),则返回原字符串的副本;反之,如果指定fillchar,则以fillchar在原字符串两边进行填充缺失的字符串;

  • width:字符串的总宽度
  • fillchar:填充字符

例子:

"python".center(6)       
# python  因为width小于等于原字符串长度

"python".center(7)       
# ' python'  如果不指定fillchar,则在两边以空字符填充

"python".center(8, "*")  
# '*python*'

3.2 字符串左对齐

格式:

str.ljust(width[, fillchar])

字符串靠左对齐,且返回长度为 width 的字符串,如果width小于等于len(s),则返回原始字符串的副本;反之如果指定fillchar, 则以fillchar填充字符串;如果未指定fillchar,则默认以空格填充;

  • width:字符串的总宽度
  • fillchar:填充字符

例子:

"abc".ljust(4)          
# 'abc '

"abc".ljust(6, '-')     
# 'abc---'

3.3 字符串右对齐

格式:

str.rjust(width[, fillchar])

字符串靠右对齐,且返回长度为`width`的字符串,如果 width <= len(str),则返回原始字符串的副本;反之,如果指定fillchar, 则以fillchar填充左侧,如果未指定fillchar,则默认以空格填充;

  • width:字符串的总宽度
  • fillchar:填充字符

例子:

"abc".rjust(6)        
# '   abc'

"abc".rjust(6, '-')   
# '---abc'

3.4 字符串右对齐

格式:

str.zfill(width)

返回指定长度 width 的字符串,原字符串右对齐,前面填充0;如果 width <= len(s) 则返回原字符串副本;对于正负值前缀的字符串处理方式为在正负符号之后填充;

  • width:字符串的总宽度

例子:

"hello".zfill(6)   
# '0hello'

"42".zfill(6)      
# '000042'

"-42".zfill(6)     
# '-00042'

4. 子字符串的位置

格式:

str.count(sub[, start[, end]])

返回子字符串sub在[start, end]范围内出现的次数;

例子:

"people".count("p")  
# 2

5. 字符串编码与bytes解码

5.1 编码

格式:

str.encode(encoding='utf-8', errors='strict')

将字符以`encoding`指定的编码格式进行编码;也可以通过`errors`来设置不同的错误处理方案;默认为`strict`,编码错误引发`UnicodeError`异常;

  • encoding:设置字符编码
  • errors:编码异常处理方案;默认strict,其他方案请参见文档;

例子:

s = "中国"

sutf8 = s.encode("utf-8")   
# b'\xe4\xb8\xad\xe5\x9b\xbd'

sgbk = s.encode("gbk")     
# b'\xd6\xd0\xb9\xfa'

5.2 解码

格式:

bytes.decode(encoding='utf-8', errors='strict')

解码给定的`bytes`对象

例子:

b'\xe4\xb8\xad\xe5\x9b\xbd'.decode("utf-8")   
# 中国

b'\xd6\xd0\xb9\xfa'.decode("gbk")             
# 中国

6. 检测字符串特殊字符串开头结尾

6.1 特殊前缀开头

格式:

str.startswith(prefix[, start[, end]])

判断字符串是否以指定前缀`prefix`开头,如果是则返回`True`,反之则返回`False`;`prefix`也可是由多个前缀组成的元组

例子:

"hello".startswith("he")
# True

6.2 特殊后缀结尾

格式:

str.endswith(suffix[, start[, end]])

判断字符串是否以指定后缀`suffix`结尾。如果是则返回`True`,反之则返回`False`;`suffix`也可是由多个后缀组成的元组

例子:

"hello".endswith("lo")
# True

7. 将字符串中 \t 转为空格

格式:

str.expandtabs(tabsize=8)

将字符串中的`\t`转换为空格

  • tabsize:指定转换字符串中的tab符号`\t`转为空格的字符数

例子:

"hello\tpython".expandtabs(10)    
# 'hello     python'

8. 查找字符串

8.1 find

格式:

str.find(sub[, start[, end]])

检查字符是否包含子字符串`sub`,如果指定范围,则在指定范围内进行搜索;如果包含则返回开始的索引;反之则返回`-1`

8.2 index

格式:

str.index(sub[, start[, end]])

类似于`find`,找不到子字符串会引发`ValueError`异常

8.3 rfind

格式:

str.rfind(sub[, start[, end]])

从右侧搜索字符串,检查字符串是否包含子字符串`sub`;如果包含则返回索引,未找到返回`-1`

8.4 rindex

格式:

str.rindex(sub[, start[, end]])

类似于`rfind`,如果未找到子字符串,则会引发`ValueError`异常

9.  判断字符串

9.1 是否由字母或数字组成

格式:

str.isalnum()

判断字符串是否由字母或数字组成,且至少有一个字符组成;是则返回`True`,反之则返回`False`

9.2 是否全部为字母

格式:

str.isalpha()

判断字符串是否全部是字母;如果是则返回`True`,反之返回`False`;

10 判断字符串是否为数字

10.1 isdecimal()

格式:

str.isdecimal()

所有字符串是否为十进制数字的字符且至少有一个字符,则返回`True`,否则返回`False`。包括:`Unicode`数字、全角数字;不包括:小数、罗马数字、汉字数字

10.2 isdigit

格式:

str.isdigit()

所有字符串是否都是数字且至少有一个字符,如果是则返回`True`,反之则返回`False`;包括:`unicode`数字、全角数字、byte数字;不包括:小数、罗马数字、汉字数字

10.3 isnumeric

格式:

str.isnumeric()

所有字符串是否都是数字字符且至少有一个字符;是则返回`True`,反之返回`False`;包括:`Unicode`数字、全角数字、罗马数字、汉字数字;不包括:小数

isdecimal 和 isdigit 的区别在 byte 数字上:

  • byte 数字使用 isdecimal 时异常,使用 isdigit 是输出 True 

isnumeric() 和 isdecimal 的区别就在罗马数字和汉字数字上:

  • 罗马数字和汉字数字在使用 isnumberic() 时输出 True ;使用 isdecimal() 时输出 False 

11. 判断字符大小写

11.1 是否全部为小写

格式:

str.islower()

判断字符串是否全部为小写字符,如果是则返回`True`,反之返回`False`;

11.2 是否全部为大写

格式:

str.isupper()

判断字符串是否全部为大写,如果是则返回`True`,反之则返回`False`;

12. 字符串大小写转换

12.1 转为小写

格式:

str.lower()

将字符串全部转换为小写字符串

12.2 转为大写

格式:

str.upper()

将字符串全部转换为大写字符串

12.3 大小写转换

格式:

str.swapcase()

将字符串大小写进行转换;即将大写转为小写,将小写转为大写;

例子:

"AcB".swapcase()  
# 'aCb' 

13 移除特定字符

13.1 去除字符串首尾空格或指定字符

格式:

str.strip([chars])

去除字符串头尾的空格或指定字符

  • chars:要移除的字符串;默认为`None`,移除空白符。`chars`虽然是字符串,但不是以字符串形式的`chars`移除,去除包含在`chars`中的字符;直到遇到第一个不在`chars`中的字符为止;

例子:

'   abc  '.strip()     
# 'abc '

'%^abc^%'.strip('%^')  
# 'abc'

13.2 去除字符串左边空格或指定字符

格式:

str.lstrip([chars])

移除字符串左边指定字符或空格;返回截掉字符串左边的空格或指定字符后生成的新字符串;

  • chars:同上

例子:

' abc '.lstrip()                    
# 'abc '

'www.baidu.com'.lstrip('cmowz.')    
# 'baidu.com'

13.3 去除字符串右边空格或指定字符

格式:

str.rstrip([chars])

去除字符串右侧空格或指定字符;

13.4 移除字符串特定前缀

格式:

str.removeprefix(prefix, /)

移除特定前缀`prefix`开头的字符串;3.9功能

例子:

"www.baidu.com".removeprefix("www")    
# "baidu.com"

13.5 移除字符串特定后缀

格式:

str.removesuffix(suffix, /)

移除特定后缀`suffix`结尾的字符串;3.9功能

14. 拆分字符串

14.1 首次出现位置拆分字符串

格式:

str.partition(sep)

在`sep`首次出现的位置拆分字符串,返回一个3元组;包含分隔符之前的部分、分隔符本身、以及分隔符之后的部分;

例子:

"WAAACCCC".partition('W')         
# ('', 'W', 'AAACCCC')

"wwww.baidu.com".partition('.')   
# ('wwww', '.', 'baidu.com')

14.2 分隔字符串

格式:

str.split(sep, maxsplit=-1)

分割字符串;从左往右分;返回由字符串内单词组成的列表;

  • sep:分割符;默认空格;如果给出`sep`,则连续的分隔符不会被组合在一起,而是被视为分隔空字符串;如`1,,2.split(',')->['1', '', '2']`;使用指定分隔符,拆分字符串将返回`['']`

  • maxsplit:分割次数;默认不限制;

例子:

"1,2,3".split(',')              
# ['1', '2', '3']

'1,2,3'.split(',', maxsplit=1)  
# ['1', '2.3']

'1,2,,3,'.split(',')             
# ['1,', '2', '', '3', '']

14.3 左侧分割字符串

格式:

str.rsplit(sep=None, maxsplit=-1)

分割字符串;从左往右分;同上

14.4 右侧分割字符串

格式:

str.lsplit(sep=None, maxsplit=-1)

分割字符串;从右往左分;同上

14.5 按照行(\r、\r\n、\n)分割字符串

格式:

str.splitlines(keepends=False)

按照行('\r', '\r\n', '\n')边界分隔;返回包含各行作为元素的列表;

  • keepends:在输出结果里是否去掉换行符`('\r', '\r\n', '\n')`,默认为`False`,不包含;如果为`True`,则保留;

例子:

"abc\ngggg\r".splitlines()   
# ['abc', 'gggg']

"".splitlines()              
# []

15 标题化字符串

15.1 标题化字符串

格式:

str.title()

返回标题化字符串,所有单词的首字母大写;其余均转为小写;

例子:

'Hello world'.title()   # 'Hello World'

15.2 检测是否为标题化字符串

格式:

str.istitle()

检测字符串中所有单词拼写首字母是否为大写,其其他字母为小写;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值