文章目录
- 一、格式化字符串
- 1、使用占位符
- 2、格式化操作符辅助命令
- 3、format()方法
- 4、填充与对齐
- 5、数据类型
- 6、字符串的方法及注释
- 7、转义字符及其含义
- 8、去除字符中得'\xa0'
- 9、字符串类型判断
- 二、异常
- 1、处理单个异常
- 2、分开处理多个异常
- 3、统一处理多个异常
- 4、完整结构
- 5、不确定异常类型
- 6、常见错误总结
- 7、自发异常
- 三、join,split函数
- 1、join()函数
- 2、os.path.join()函数
- 3、split()函数
- 四、保留小数的几种方法
- 1、保留两位小数且做四舍五入处理
- 2、保留两位小数且不做四舍五入处理
- 五、一行式
- 1、if语句
- 2、all函数
- 3、any()函数
- 六、集合
- 七、文件处理
- 1、文件处理模式
- 2、文件对象的方法
一、格式化字符串
1、使用占位符
占位符 | 说明 |
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制 |
%c | 格式化字符及其 ASCII 码 |
%o | 格式化无符号八进制数 |
%X | 格式化无符号十六进制数(大写) |
%e | 用科学计数法格式化浮点数 |
%E | 作用同 %e,用科学计数法格式化浮点数 |
%g | 根据值的大小决定使用 %f 或 %e |
%G | 作用同 %g,根据值的大小决定使用 %f 或者 %E |
%d:
在%与d之间加非0的数字表示这个占位符最少的长度(长度数值)。若’值长度’小于’长度数值’则将值放在最后( 为空格)
>>>'%d-%2d'%(3,3)
'3- 3'
在%与长度数值之间加0,表示在’值长度’小于’长度数值’时自动补‘0’
>>>'%2d-%02d'%(3,3)
' 3-03'
%f:
%f默认保留6位小数,
>>>'%f'%1
'1.000000'
指定保留的小数位数在%与f之间加 ‘.n’(n为位数)
例如:保留3位小数和4位小数
>>>'%.3f-%.4f'%(1,2)
'1.000-2.0000'
若是想输出一个’%‘字符串就需要转义,用%%表示一个’%'字符
>>>'他的成绩比去年提升了%.2f%%'%3.145926
'他的成绩比去年提升了3.15%'
2、格式化操作符辅助命令
符号 | 说明 |
m.n | m 是显示的最小总宽度,n 是小数点后的位数 |
- | 用于左对齐 |
+ | 在正数前面显示加号(+) |
# | 在八进制数前面显示 ‘0o’,在十六进制数前面显示 ‘0x’ 或 ‘0X’ |
0 | 显示的数字前面填充 ‘0’ 取代空格 |
3、format()方法
一个实例:
str1 = '{} {} {}'.format(1, 2, 3)
str2 = '{1} {2} {0}'.format(1, 2, 3)
str1 = '1 2 3'
str2 = '2 3 1'
函数部分:
format('czlun',17,)
#str类型要添加用引号
#'czlun'的key为0
#17的key为1,依次增加。
字符部分:
'Name:{} Age:{}'
#format中以{}作为占位符
#占位符里为空,则第一个占位符对应第一个值(对应key为0的值),依次增加
#占位符里为空,则占位符的数量不能大于函数内的值的数量
'Name:{1} Age:{0} Name:{1}'
#若想让每个占位符分别指向函数内的值,只需可以在占位符里填入对应的key
#函数内的值可以被非空占位符多次调用,所以可以出现非空占位符数量大于函数内的值的数量的情况
#注意:空占位符与非空占位符不可混用
任何情况下,函数内的值的数量大于占位符的数量都不会报错
关键字映射:
'Name:{_name} Age:{_age} Name:{_name}'.format(_name='czlun',_age=17,)
#与索引映射不同的是,用关键字替代了索引号,更容易理解对应的值
#若想让每个占位符分别指向函数内的值,只需可以在占位符里填入对应的关键字
4、填充与对齐
格式限定符是用 : 表示
填充:
格式限定符后面带填充的长度
# 格式:{: Num}
>>>'{:5}'.format('a') #'a'长度为1,小于5,执行填充操作
'a '
>>>'{:5}'.format('abcdefg') #'abcdefh'长度为7,不小于5,不执行填充操作
'abcdefg'
# '{:5}'意义:用:表示填充的操作,5表示填充的长度,当值的长度小于5时,便会用空格在末尾将长度补到5(填充结果默认是左对齐)
对齐:
格式限定符后面带对齐符(^、<、>分别是居中、左对齐、右对齐),后面带宽度
# 格式:{:^|<|>Num}
>>>'{:^5}'.format('a')
' a '
>>>'{:<5}'.format('a')
'a '
>>>'{:>5}'.format('a')
' a'
用指定字符进行填充:
格式限定符与对齐符中间加一个字符,则使用该字符进行填充,不指定的话默认是用空格填充
>>>'{:*^5}'.format('a')
'**a**'
>>>'{:*<5}'.format('a')
'a****'
>>>'{:*>5}'.format('a')
'****a'
指向函数内的值:
是不是觉得用了这个格式限定符就无法输出函数内其他的值了?
若想让每个占位符分别指向函数内的值,只需可以在格式限定符前填入对应的key
>>>'{0:*^5}'.format('a','b','c')
'**a**'
>>>'{1:*<5}'.format('a','b','c')
'b****'
>>>'{2:*>5}'.format('a','b','c')
'****c'
5、数据类型
符号 | 说明 | 实例 |
‘f’ | 将数值以浮点数输出 | >>>‘{:.2f}’.format(10/3) ‘3.33’ |
‘d’ | 将数字以十进制进行输出 | >>>‘{:d}’.format(10) ‘10’ |
‘b’ | 将数字以二进制数进行输出 | >>>‘{:b}’.format(3) ‘11’ |
‘o’ | 将数字以八进制数进行输出 | >>>‘{: o}’.format(10) ‘12’ |
‘x’ | 将数字以十六进制数进行输出 | >>>‘{:x}’.format(10) ‘a’ |
‘c’ | 在打印之前将整数转换成对应的Unicode字符串 | >>>‘{:c}’.format(65) ‘A’ |
‘e’ | 用科学计数法打印数字,用’e’表示幂 | >>>‘{:.2e}’.format(1999)‘ 2.00e+03’ |
‘%’ | 将数字以百分数输出 | >>>‘{:.2%}’.format(3/10)‘ 30.00%’ |
‘,’ | 金额千位分隔符 | >>>‘{:,}’.format(100861001010000)‘ 100,861,001,010,000’ |
6、字符串的方法及注释
方法 | 注释 |
capitalize() | 把字符串的第一个字符改为大写 |
casefold() | 把整个字符串的所有字符改为小写 |
center(width) | 将字符串居中,并使用空格填充至长度 width 的新字符串 |
count(sub[, start[, end]]) | 返回 sub 在字符串里边出现的次数,start 和 end 参数表示范围,可选。 |
encode(encoding=‘utf-8’, errors=‘strict’) | 以 encoding 指定的编码格式对字符串进行编码。 |
endswith(sub[, start[, end]]) | 检查字符串是否以 sub 子字符串结束,如果是返回 True,否则返回 False。start 和 end 参数表示范围,可选。 |
expandtabs([tabsize=8]) | 把字符串中的 tab 符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize=8。 |
find(sub[, start[, end]]) | 检测 sub 是否包含在字符串中,如果有则返回索引值,否则返回 -1,start 和 end 参数表示范围,可选。 |
index(sub[, start[, end]]) | 跟 find 方法一样,不过如果 sub 不在 string 中会产生一个异常。 |
isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。 |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。 |
isdecimal() | 如果字符串只包含十进制数字则返回 True,否则返回 False。 |
isdigit() | 如果字符串只包含数字则返回 True,否则返回 False。 |
islower() | 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False。 |
isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False。 |
isspace() | 如果字符串中只包含空格,则返回 True,否则返回 False。 |
istitle() | 如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回 True,否则返回 False。 |
isupper() | 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。 |
join(sub) | 以字符串作为分隔符,插入到 sub 中所有的字符之间。 |
ljust(width) | 返回一个左对齐的字符串,并使用空格填充至长度为 width 的新字符串。 |
lower() | 转换字符串中所有大写字符为小写。 |
lstrip() | 去掉字符串左边的所有空格 |
partition(sub) | 找到子字符串 sub,把字符串分成一个 3 元组 (pre_sub, sub, fol_sub),如果字符串中不包含 sub 则返回 (‘原字符串’, ‘’, ‘’) |
replace(old, new[, count]) | 把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次。 |
rfind(sub[, start[, end]]) | 类似于 find() 方法,不过是从右边开始查找。 |
rindex(sub[, start[, end]]) | 类似于 index() 方法,不过是从右边开始。 |
rjust(width) | 返回一个右对齐的字符串,并使用空格填充至长度为 width 的新字符串。 |
rpartition(sub) | 类似于 partition() 方法,不过是从右边开始查找。 |
rstrip() | 删除字符串末尾的空格。 |
split(sep=None, maxsplit=-1) | 不带参数默认是以空格为分隔符切片字符串,如果 maxsplit 参数有设置,则仅分隔 maxsplit 个子字符串,返回切片后的子字符串拼接的列表。 |
splitlines(([keepends])) | 在输出结果里是否去掉换行符,默认为 False,不包含换行符;如果为 True,则保留换行符。。 |
startswith(prefix[, start[, end]]) | 检查字符串是否以 prefix 开头,是则返回 True,否则返回 False。start 和 end 参数可以指定范围检查,可选。 |
strip([chars]) | 删除字符串前边和后边所有的空格,chars 参数可以定制删除的字符,可选。 |
swapcase() | 翻转字符串中的大小写。 |
title() | 返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串。 |
translate(table) | 根据 table 的规则(可以由 str.maketrans(‘a’, ‘b’) 定制)转换字符串中的字符。 |
upper() | 转换字符串中的所有小写字符为大写。 |
zfill(width) | 返回长度为 width 的字符串,原字符串右对齐,前边用 0 填充。 |
7、转义字符及其含义
符号 | 说明 |
\’ | 单引号 |
\" | 双引号 |
\a | 发出系统响铃声 |
\b | 退格符 |
\n | 换行符 |
\t | 横向制表符(TAB) |
\v | 纵向制表符 |
\r | 回车符 |
\f | 换页符 |
\o | 八进制数代表的字符 |
\x | 十六进制数代表的字符 |
\0 | 表示一个空字符 |
\\ | 反斜杠 |
8、去除字符中得’\xa0’
text = '738.7\xa0MB'
text = ''.join(text.split())
print(text)
==> 738.7MB
9、字符串类型判断
函数 | 说明 |
str.isalnum() | 所有字符都是数字或者字母 |
str.isalpha() | 所有字符都是字母 |
str.isdigit() | 所有字符都是数字 |
str.isspace() | 所有字符都是空白字符、t、n、r |
二、异常
1、处理单个异常
try:
print(5/0) # 该行为测试的语句
except ZeroDivisionError as e: # 如果测试的语句出现except后的异常(例中的ZeroDivisionError),则执行下一行代码,否则跳过此模块
print(e) # 打印错误名称
2、分开处理多个异常
a = [0, 1]
try:
print(a[3])
print(5/0) # 语句在上一行就遇到错误传到except里面去了,未检测到此语句
except ZeroDivisionError as e: # 处理Error1异常
print(e)
except IndexError as e: # 处理Error2异常
print(e)
3、统一处理多个异常
a = [0, 1]
try:
print(a[3])
print(5/0) # 语句在上一行就遇到错误传到except里面去了,未检测到此语句
except (ZeroDivisionError, IndexError) as e: # 处理Error1异常
print(e)
4、完整结构
a = [0, 1]
try:
print(a[1])
print(5/1) # 语句在上一行就遇到错误传到except里面去了,未检测到此语句
except (ZeroDivisionError, IndexError) as e: # 处理Error1异常
print(e)
else:
print("没有错误")
finally:
print("不管有没有错,都执行finally")
5、不确定异常类型
a = [0, 1]
try:
print(a[3])
print(5/0) # 语句在上一行就遇到错误传到except里面去了,未检测到此语句
except Exception as e: # 处理Error1异常
print(e)
6、常见错误总结
错误 | 说明 |
AttributeError | 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x |
IOError | 输入/输出异常;基本上是无法打开文件 |
ImportError | 无法引入模块或包;基本上是路径问题或名称错误 |
IndentationError | 语法错误(的子类) ;代码没有正确对齐 |
IndexError | 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] |
KeyError | 试图访问字典里不存在的键 |
KeyboardInterrupt | Ctrl+C被按下 |
NameError | 使用一个还未被赋予对象的变量 |
SyntaxError | Python代码非法,代码不能编译(个人认为这是语法错误,写错了) |
TypeError | 传入对象类型与要求的不符合 |
UnboundLocalError | 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 |
ValueError | 传入一个调用者不期望的值,即使值的类型是正确的 |
7、自发异常
class CustomError(Exception):
def __init__(self,ErrorInfo):
super().__init__(self) #初始化父类
self.errorinfo=ErrorInfo
def __str__(self):
return self.errorinfo
if __name__ == '__main__':
try:
raise CustomError('自定义异常')
except Exception as e:
print(e)
三、join,split函数
1、join()函数
seq1 = ['hello', 'good', 'boy', 'doiido']
seq2 = "hello good boy doiido"
seq3 = ('hello', 'good', 'boy', 'doiido')
seq4 = {'hello': 1, 'good': 2, 'boy': 3, 'doiido': 4}
print(','.join(seq1))
print(','.join(seq2))
print(','.join(seq3))
print(','.join(seq4))
hello,good,boy,doiido
h,e,l,l,o, ,g,o,o,d, ,b,o,y, ,d,o,i,i,d,o
hello,good,boy,doiido
hello,good,boy,doiido
2、os.path.join()函数
import os
path = os.path.join('/hello/', 'good/boy/', 'doiido')
print(path)
/hello/good/boy/doiido
3、split()函数
str1 = "s13-d21.avi_252_452"
print(str1.split('_')) # 1
print(str1.split('_', 1)) # 2
['s13-d21.avi', '252', '452']
['s13-d21.avi', '252_452']
四、保留小数的几种方法
1、保留两位小数且做四舍五入处理
from decimal import Decimal
x = 3.1415926
print("%.2f" % x)
print(round(x, 2))
print(Decimal(x).quantize(Decimal("0.00")))
2、保留两位小数且不做四舍五入处理
import re
x = 3.1415926
print(str(x).split(".")[0] + "." + str(x).split(".")[1][:2])
print(re.findall(r"\d{1,}?\.\d{2}", str(x)))
五、一行式
1、if语句
2、all函数
判断一个tuple或者list是否全部不为
空、0、False。
如果全部不为
空、0、False,则返回True
;否则(只要有空或0或False)返回False。
注意:空tuple
(小括号)和空list
(中括号)、空字典
dictionary、空集合
set(大括号)的返回值是True
。
found = all(thing==other_thing for thing in things)
3、any()函数
判断一个tuple或者list是否全部为
空、0、False。
如果全为
空、0、False,则返回False
;
如果(只要有非[空或0或False])不全为
空、0、False,则返回True
。
注意:空tuple
(小括号)和空list
(中括号)、空字典
dictionary、空集合
set(大括号)的返回值是False
。
found = any(thing==other_thing for thing in things)
六、集合
集合(s).方法名 | 等价符号 | 方法说明 |
s.issubset(t) | s <= t | 子集测试(允许不严格意义上的子集):s 中所有的元素都是 t 的成员 |
\ | s < t | 子集测试(严格意义上):s != t 而且 s 中所有的元素都是 t 的成员 |
s.issuperset(t) | s >= t | 超集测试(允许不严格意义上的超集):t 中所有的元素都是 s 的成员 |
\ | s > t | 超集测试(严格意义上):s != t 而且 t 中所有的元素都是 s 的成员 |
s.union(t) | s | t | 合并操作:s “或” t 中的元素 |
s.intersection(t) | s & t | 交集操作:s “与” t 中的元素 |
s.difference | s - t | 差分操作:在 s 中存在,在 t 中不存在的元素 |
s.symmetric_difference(t) | s ^ t | 对称差分操作:s “或” t 中的元素,但不是 s 和 t 共有的元素 |
s.copy() | 返回 s 的拷贝(浅复制) | |
| ||
s.update | s |= t | 将 t 中的元素添加到 s 中 |
s.intersection_update(t) | s &= t | 交集修改操作:s 中仅包括 s 和 t 中共有的成员 |
s.difference_update(t) | s -= t | 差修改操作:s 中包括仅属于 s 但不属于 t 的成员 |
s.symmetric_difference_update(t) | s ^= t | 对称差分修改操作:s 中包括仅属于 s 或仅属于 t 的成员 |
s.add(obj) | 加操作:将 obj 添加到 s | |
s.remove(obj) | 删除操作:将 obj 从 s 中删除,如果 s 中不存在 obj,将引发异常 | |
s.discard(obj) | 丢弃操作:将 obj 从 s 中删除,如果 s 中不存在 obj,也没事儿_ | |
s.pop() | 弹出操作:移除并返回 s 中的任意一个元素 | |
s.clear() | 清除操作:清除 s 中的所有元素 |
七、文件处理
1、文件处理模式
模式 | 描述 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。 如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。 如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
‘x’ | 如果文件已经存在,使用此模式打开将引发异常 |
‘b’ | 以二进制模式打开文件 |
‘t’ | 以文本模式打开(默认) |
‘+’ | 可读写模式(可添加到其他模式中使用) |
‘U’ | 通用换行符支持 |
2、文件对象的方法
方法 | 说明 |
f.read() | 为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。 |
f.readline() | 从文件中读取单独的一行。换行符为 ‘\n’。如果返回一个空字符串, 说明已经已经读取到最后一行。 |
f.readlines() | 将返回该文件中包含的所有行。如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。 |
f.write(string) | 将 string 写入到文件中, 然后返回写入的字符数。 |
f.writelines(seq) | 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象 |
f.tell() | 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。 |
f.seek(offset, from) | 在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节 |
f.truncate([size=file.tell()]) | 截取文件到size个字节,默认是截取到文件指针当前位置 |
f.close() | 关闭文件 |