一、进制转换
1.其他进制转10进制
- 使用int(num,binary)函数
- num 要转换的数字字符串
- binary 按照何种进制来解析 取值:2 8 10 16 0(自动判断是何种进制)
2. 10进制数转其他进制
- 转为2进制 bin()
- 转为8进制 oct()
- 转为16进制hex()
3.非10进制之间的转化
思路:先用int(num,binary)函数转为10进制数,然后再转换为目标进制
-
例如: 将0o56437转换为2进制数:
bin(int('0o56437',8))
二、文件处理
文件处理的步骤一般如下:
- 打开文件
- 操作文件
- 关闭文件
1.打开文件
使用open(name[, mode[, buffering]])方法打开文件,其参数说明如下:
name 文件的路径 可以是绝对路径,也可以是相对路径
mode mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
-
buffering:如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
文件打开模式列表:
[图片上传失败...(image-ae249-1629191567312)]
2.操作文件
file对象方法如下:
- file.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串)。
- file.readline():返回一行。
- file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。
- for line in f: print(line) :通过迭代器访问。
- f.write("hello\n"):如果要写入字符串以外的数据,先将他转换为字符串。
- f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的字节数)。
- f.seek(偏移量,[起始位置]):用来移动文件指针。
- 偏移量: 单位为字节,可正可负
- 起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾
3.关闭文件
关闭文件 f.close()
4. 文件操作一般步骤
-
一般步骤
f = open('test.txt','r',encoding='utf-8') # 打开文件 txt = f.read() # 操作文件 f.close() # 关闭文件
-
加强版(with关键字)
with语句作用是简化文件操作的try...except...finally流程,不必显式的关闭文件
with open('test.txt','r',encoding='utf-8') as f: txt = f.read()
5.一维数据的操作
什么是一维数据
答:由对等关系的有序或无序数据构成,采用线性方式(一条直线排开)组织。对等关系:这些数据平级关系(不是包含、从属关系)
一维数据的写入
思路:将列表中的一维数据先转化为字符串,再将字符串写入文件中。
data = ['上海','北京','重庆','天津']
# 写数据
with open('test.txt','w',encoding='utf-8') as f:
# 将列表转化为字符串
data = ','.join(data)
# 写入文件
f.write(data)
一维数据的读取
思路:打开文件,使用f.read()方法将文件中的内容读取成字符串,再将这个字符串按照‘,’分割成列表。
data = []
with open('test.txt','r',encoding='utf-8') as f:
data_str = f.read() # 读取内容
data = data_str.split(',') # 将内容以逗号分割
6.二维数据的操作
什么是二维数据?
答:由多个一维数据构成,是一维数据的组合形式。也称为表格数据,其中,表头是二维数据的一部分,也可以不作为其中的一部分。
二维数据的表示形式?
答:使用二维列表来表示二维数据、
姓名 | 年龄 | 性别 | 电话 |
---|---|---|---|
孙悟空 | 500 | 男 | 18888888888 |
猪八戒 | 36 | 男 | 18877777777 |
沙和尚 | 28 | 男 | 18866666666 |
唐三藏 | 15 | 男 | 18855555555 |
白龙马 | 9 | 男 | 18844444444 |
白骨精 | 2000 | 女 | 18833333333 |
二维数据的写入
思路:将二维列表转化为储存字符串的一位列表,然后遍历列表,将每个字符串单独写到文件中的一行。
data = [
['孙悟空','500','男','18888888888'],
['猪八戒','36','男','18877777777'],
['沙和尚','28','男','18866666666'],
['唐三藏','15','男','18855555555'],
['白龙马','9','男','18844444444'],
['白骨精','2000','女','18833333333']
]
with open('test.csv','w',encoding='utf-8') as f:
for item in data:
f.write(','.join(item)+'\n')
二维数据的读取
思路:将所有数据先读取出来,然后按照换行分割,再将每个分割后的字符串按照逗号分割。
result = []
with open('test.csv','r',encoding='utf-8') as f:
for i in f:
result.append(i.strip('\n').split(','))
print(result)
三、异常处理
1.概念
python解释器检测到错误,触发异常(也允许程序员自己触发异常)。程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)。如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理。
python解释器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,谁会去用一个运行着突然就崩溃的软件。所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性。良好的容错能力,能够有效的提高用户体验,维持业务的稳定性。
程序运行中的异常可以分为两类:语法错误和逻辑错误。首先,我们必须知道,语法错误跟异常处理无关,所以我们在处理异常之前,必须避免语法上的错误。
2.异常种类
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误。
常见异常:
AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError 传入对象类型与要求的不符合
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
导致你以为正在访问它ValueError 传入一个调用者不期望的值,即使值的类型是正确的
其他异常
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
3.基本语法
try:
语句...
...
except <异常名称(如果不写则捕获所有异常)>:
处理异常语句...
...
else:
没有发生异常,则执行的语句...
...
finally:
无论有没有捕获到异常,都要执行的代码...
...
4.例子
inp1 = input('请输入一个数字:')
inp2 = input('请输入一个数字:')
try:
sum_inp = int(inp1)+int(inp2)
print('您输入的数字之和为:'+str(sum_inp))
except ValueError:
print('您输入的内容不合法')
finally:
print('这是finally语句')
四、常用内置函数
1.数学运算类
- abs(n)函数
求一个数的绝对值。
abs(-68) # 输出68
- divmod(n1,n2)
返回一个整除结果和取模结果的二元组。(先整除,后取模)
divmod(10,3) # 返回(3,1)
- max(n)
n可以是一个字符串或列表或元组或集合或可变长参数,求他们当中的最大值。
max(1,5,8,9,7) # 返回9
max([1,6,9,8,7]) # 返回9
max('asdgasdey') # 返回y
- min(n)
求最小值,用法和max一样
- sum(*n)
n是一个可变长参数,传入数字可求他们的和。
sum(1,2,3,4,5,6) # 返回21
- round(n1,n2)
将传入的浮点数n1,保留n2位小数。四舍五入
round(3.1415926,2) # 保留两位小数 返回3.14
round(3.1455926,2) # 保留两位小数 返回3.15