菜鸟教程 《Python 3 教程》笔记(5):字符串

菜鸟教程 《Python 3 教程》笔记(5)

  • 5 字符串
    • 5.1 Python 转义字符
    • 5.2 Python 字符串格式化
    • 5.3 f-string
    • 5.4 Unicode 字符串
    • 5.5 Python 的字符串方法
      • 5.5.1 capitalize()
      • 5.5.2 center()、ljust()、rjust()、zfill()
      • 5.5.3 count()
      • 5.5.4 endswith()、startswith()
      • 5.5.5 expandtabs()
      • 5.5.6 find()、rfind()、index()和rindex()
      • 5.5.7 isalnum() 等方法
      • 5.5.8 maketrans()、translate()
      • 5.5.9 rstrip()、lstrip()、strip()
      • 5.5.10 split()
      • 5.5.11 splitlines()
      • 5.5.12 title()

5 字符串

出处:菜鸟教程 - Python3 字符串

5.1 Python 转义字符

在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符。如下表:

转义字符 描述
\(在行尾时) 续行符
\ 反斜杠符号
单引号
" 双引号
\a 响铃
\b 退格(Backspace)
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车,将 \r 后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将 \r 后面的内容完全替换完成。
\f 换页
\yyy 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
\xyy 十六进制数,以 \x 开头,y 代表的字符,例如:\x0a 代表换行。
\other 其它的字符以普通格式输出

实例:

>>> print("line1 \
... line2 \
... line3")
line1 line2 line3
>>> print("\\")
\
>>> print('\'')
'
>>> print("\"")
"
>>> print("\a")
# 执行后电脑有响声。
>>> print("Hello \b World!")
Hello World!
>>> print("\000")

>>> print("\n")


>>> print("Hello \v World!")
Hello 
       World!
>>> print("Hello\rWorld!")
World!
>>> print('google runoob taobao\r123456')
123456 runoob taobao
>>> print("Hello \f World!")
Hello 
       World!
>>> print("\110\145\154\154\157\40\127\157\162\154\144\41")
Hello World!
>>> print("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21")
Hello World!

一段有趣的代码:

import time

for i in range(101):
    print("\r{:3}%".format(i),end=' ')
    time.sleep(0.05)

5.2 Python 字符串格式化

在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

符号 描述
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%u 格式化无符号整型
%0 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g %f和%e的简写
%G %f 和 %E 的简写
%p 用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号 功能
* 定义宽度或者小数点精度
- 用做左对齐
+ 在正数前面显示加号( + )
在正数前面显示空格
# 在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0 显示的数字前面填充’0’而不是默认的空格
% ‘%%‘输出一个单一的’%’
(var) 映射变量(字典参数)
m.n. m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

5.3 f-string

f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。

在 Python 3.8 的版本中可以使用 = 符号来拼接运算表达式与结果:

>>> x = 1
>>> print(f'{x+1}')   # Python 3.6
2

>>> x = 1
>>> print(f'{x+1=}')   # Python 3.8
x+1=2

5.4 Unicode 字符串

在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。

在Python3中,所有的字符串都是Unicode字符串。

5.5 Python 的字符串方法

5.5.1 capitalize()

描述:

capitalize() 将字符串的第一个字母变成大写,其他字母变小写。

语法:

str.capitalize()

5.5.2 center()、ljust()、rjust()、zfill()

描述:

center() 方法返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
rjust() 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。
zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。zfill(width) 作用同 rjust(width, "0")

语法:

str.center(width[, fillchar])

参数:

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

返回值:

返回一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充。

实例:

str = "[runoob]"
print ("str.center(40, '*') : ", str.center(40, '*'))
print ("str.center(40, '*') : ", str.ljust(40, '*'))
print ("str.center(40, '*') : ", str.rjust(40, '*'))

str.center(40, '*') :  ****************[runoob]****************
str.center(40, '*') :  [runoob]********************************
str.center(40, '*') :  ********************************[runoob]

注意:

  1. width 小于字符串长度时,返回字符串,不会截断;
  2. fillchar 只能接收单个字符;
  3. 奇数个字符时,优先补充右边;偶数个字符时,优先补充左边。
>>> str = "[www.runoob.com]"
>>> print ("str.center(4, '*') : ", str.center(4, '*'))
str.center(4, '*') :  [www.runoob.com]         // width 小于字符串宽度

>>> str = "[www.runoob.com]"
>>> print ("str.center(40, '?!') : ", str.center(40, '?!'))
Traceback (most recent call last):
  File "", line 1, in <module>
TypeError: The fill character must be exactly one character long

>>> print('123'.center(4, '*'))     # 奇数个字符时优先向右边补*
123*
>>> print('1234'.center(5, '*'))    # 偶数个字符时优先向左边补*
*1234
>>> print('1234'.center(7, '*'))
**1234*

5.5.3 count()

描述:

count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。

语法:

str.count(sub, start= 0,end=len(string))

参数:

  • sub – 搜索的子字符串;
  • start – 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0;
  • end – 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。

返回值:

该方法返回子字符串在字符串中出现的次数。

实例:

str="www.runoob.com"
sub='o'
print ("str.count('o') : ", str.count(sub))
sub='run'
print ("str.count('run', 0, 10) : ", str.count(sub,0,10))
# 输出
str.count('o') :  3
str.count('run', 0, 10) :  1

注意: 已统计过的字符不重复统计。

>>> str1,str2,str3 = 'aaaa','aaaaa','aaaaaa'
>>> print(str2.count('aa'))
2
>>> print(str2.count('aa'))
2
>>> print(str3.count('aa'))
3

5.5.4 endswith()、startswith()

描述:

endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回 True,否则返回 False。可选参数 “start” 与 “end” 为检索字符串的开始与结束位置。

语法:

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

参数:

  • suffix – 该参数可以是一个字符串或者是一个元素;
  • start – 字符串中的开始位置;
  • end – 字符中结束位置。

返回值:

如果字符串含有指定的后缀返回 True,否则返回 False。

注意: 判断范围为 [start, end) 。

5.5.5 expandtabs()

描述:

expandtabs() 方法把字符串中的 tab 符号 \t 转为空格,tab 符号 \t 默认的空格数是 8,在第 0、8、16…等处给出制表符位置,如果当前位置到开始位置或上一个制表符位置的字符数不足 8 的倍数则以空格代替。

语法:

str.expandtabs(tabsize=8)

参数:

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

返回值:

该方法返回字符串中的 tab 符号 \t 转为空格后生成的新字符串。

实例:

str = "this is\tstring example....wow!!!"    # \t 前面的字符串长度为 7

print("替换 \\t 符号: " + str.expandtabs(0))  # 删除\t
print("替换 \\t 符号: " + str.expandtabs(1))  # 补充1个
print("替换 \\t 符号: " + str.expandtabs(2))  # 补充1个
print("替换 \\t 符号: " + str.expandtabs(3))  # 补充2个
print("替换 \\t 符号: " + str.expandtabs(7))  # 补充7个
# 输出
替换 \t 符号: this isstring example....wow!!!
替换 \t 符号: this is string example....wow!!!
替换 \t 符号: this is string example....wow!!!
替换 \t 符号: this is  string example....wow!!!
替换 \t 符号: this is       string example....wow!!!

5.5.6 find()、rfind()、index()和rindex()

语法:

str.find(str, beg=0, end=len(string))
str.index(str, beg=0, end=len(string))

注意: 寻值范围为 [beg, end) 。

两者的区别:

未找到子字符串时,find() 返回 -1,index() 抛出异常。

5.5.7 isalnum() 等方法

方法 描述 True False
isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False a-z,A-Z,0-9,中文 标点符号
isalpha() 如果字符串至少有一个字符并且所有字符都是字母或中文字则返回 True, 否则返回 False a-z,A-Z,中文 0-9,标点符号
isdigit() 如果字符串只包含数字则返回 True 否则返回 False 0-9,byte数字(单字节),全角数字(双字节) 汉字数字,罗马数字
isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False Unicode 数字,全角数字(双字节),汉字数字 罗马数字
isdecimal() 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false 0-9,全角数字(双字节) 罗马数字,汉字数字
isspace() 如果字符串中只包含空白,则返回 True,否则返回 False 空格、制表符(\t)、换行(\n)、回车(\r)
isupper() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False A-Z + 其他 a-z + 其他
islower() 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False a-z + 其他 A-Z + 其他
istitle() 如果字符串是标题化的(见 5.5.12 title())则返回 True,否则返回 False 大写字母开头,后接小写字母或中文

实例:

num = "\u0030"  #unicode 0
num.isdigit()   # True
num.isdecimal() # True
num.isnumeric() # True

num = "\u00B2"  #unicode ²
num.isdigit()   # True
num.isdecimal() # False
num.isnumeric() # True

num = "\u00B2"  #unicode ½
num.isdigit()   # False
num.isdecimal() # False
num.isnumeric() # True

num = "1" # 全角
num.isdigit()   # True
num.isdecimal() # True
num.isnumeric() # True

num = b"1" # byte
num.isdigit()   # True
num.isdecimal() # AttributeError 'bytes' object has no attribute 'isdecimal'
num.isnumeric() # AttributeError 'bytes' object has no attribute 'isnumeric'

num = "IV" # 罗马数字
num.isdigit()   # False
num.isdecimal() # False
num.isnumeric() # False

num = "四" # 汉字
num.isdigit()   # False
num.isdecimal() # False
num.isnumeric() # True

5.5.8 maketrans()、translate()

描述:

maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。两个字符串的长度必须相同,为一一对应的关系。

注意: Python3.4 已经没有 string.maketrans() 了,取而代之的是内建函数: bytearray.maketrans()、bytes.maketrans()、str.maketrans() 。

语法:

string.maketrans(x[, y[, z]])

参数:

  • x – 必需,字符串中要替代的字符组成的字符串;
  • y – 可选,相应的映射字符的字符串;
  • z – 可选,要删除的字符。

返回值:

返回字符串转换后生成的新字符串。

实例:

# 一个参数,该参数必须为字典
>>> d = {'a':'1','b':'2','c':'3','d':'4','e':'5','s':'6'}
>>> trantab = str.maketrans(d)
>>> st='just do it'
>>> print(st.translate(trantab))
ju6t 4o it

# 两个参数 x 和 y,x、y 必须是长度相等的字符串,并且 x 中每个字符映射到 y 中相同位置的字符
>>> x = 'abcdefs'
>>> y = '1234567'
>>> st='just do it'
>>> trantab = str.maketrans(x,y)
>>> print(st.translate(trantab))
ju7t 4o it

# 三个参数 x、y、z,第三个参数 z 必须是字符串,先删除,再替换
>>> x = 'abcdefs'
>>> y='1234567'
>>> z='ot'
>>> st='just do it'
>>> trantab = str.maketrans(x,y,z)
>>> print(st.translate(trantab))
ju7 4 i

5.5.9 rstrip()、lstrip()、strip()

描述:

rstrip() 删除 string 字符串末尾的指定字符,默认为空白符,包括空格、换行符、回车符、制表符。

语法:

str.rstrip([chars])

注意: chars 是一个包含需要删除的字符的字符串。从 str 的末尾开始删除,直到末尾的字符不在 chars 中。

参数:

  • chars – 指定删除的字符(默认为空白符)

返回值:

返回删除 string 字符串末尾的指定字符后生成的新字符串。

实例:

>>> random_string = "this is good    "
# 字符串末尾的空格会被删除
>>> print(random_string.rstrip())
this is good
# 'si oo' 不是尾随字符,因此不会删除任何内容
>>> print(random_string.rstrip('si oo'))
this is good
# 在 'sid oo' 中 'd oo' 是尾随字符,'ood' 从字符串中删除
>>> print(random_string.rstrip('sid oo')) 
this is g
# 移除逗号(,)、点号(.)、字母 s、q 或 w,这几个都是尾随字符
>>> txt = "banana,,,,,ssqqqww....."
>>> print(txt.rstrip(",.qsw"))
banana

5.5.10 split()

描述:

split() 方法通过指定分隔符对字符串进行切片,该方法将字符串分割成子字符串并返回一个由这些子字符串组成的列表。

语法:

str.split(str="", num=string.count(str))

参数:

  • str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等;
  • num – 分割次数,如果设置了这个参数,则最多分割成 maxsplit+1 个子字符串。默认为 -1, 即分隔所有。

返回值:

返回分割后的字符串列表。

5.5.11 splitlines()

描述:

splitlines() 按照行(‘\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

语法:

str.splitlines([keepends])

参数:

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

返回值:

返回一个包含各行作为元素的列表。

实例:

>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()
['ab c', '', 'de fg', 'kl']
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(True)
['ab c\n', '\n', 'de fg\r', 'kl\r\n']

5.5.12 title()

描述:

title() 方法返回"标题化"的字符串,就是说所有单词的首个字母转化为大写,其余字母均为小写。

注意: 单词是指以a-zA-Z之外符号分割的字母。例如:ab12cd中ab、cd是单词。

语法:

str.title()

参数:

  • NA

返回值:

返回"标题化"的字符串,就是说所有单词的首字母都转化为大写。

实例:

>>> txt = "hello b2b2b2 and 3g3g3g"
>>> print(txt.title())
Hello B2B2B2 And 3G3G3G

你可能感兴趣的:(#,菜鸟教程《Python,3,教程》笔记,python)