Day01 软件测试基础总结
Day02 测试用例知识点总结(上)
Day03 测试用例知识点总结(下)
Day04 禅道-从安装到卸载
Day05 MySql的基础使用
Day06 MySql知识点总结
Day07 MySql知识点再总结与多表查询
Day08 redis的基础知识
Day08 VMware的安装、Linux系统安装和Linux基础命令
Day09 Linux常用命令总结
Day10 Linux环境部署和项目构建
Day11 shell脚本基础知识
Day12 接口和协议
Day13 Postman的使用
Day13 Windows环境下的JDK安装与Tomcat的启动
Day14 jenkins部署
Day15 jenkins的简单使用
Day16 charles的基本使用
Day17 考试
Day18 考试
Day19 Fiddler的简单使用
Day20 Python基础
Day21 python 语句基础
Day22 Python数据类型(上)
Day23 Python数据类型(下)
Day24 Python函数
Day25 Python的文件操作和异常处理
目录
本节介绍在python中文件的操作,文件的作用是存储数据。而异常是程序报错后的处理。因为一旦一条语句出错,接下来的代码都不再执行,所以需要异常处理。
正常的步骤为:新建文件->写入数据->关闭文件
使用open函数,可以打开一个已经存在的文件,或者创建一个新文件open(文件名,访问模式)
open中第一个参数为文件名,第二个参数为打开文件的方式,第三个是编码格式,注意要加上encoding=,同时值都为字符串,关于第二个参数,r为读,w为写,如果不定义第二个参数,默认为读,读只能读存在的文件,不然会报错
- #打开文件,如果没有这个文件就新建一个
- file=open('text.txt','w')
- #写入数据
- print(file.write('hello world'))
- #关闭文件
- file.close()
- #打开文件
- file=open('text.txt','r')
- #读取文件内容
- print(file.read())
- #关闭文件
- file.close()
-
- '''
- 11
- hello world
- '''
读写文件每次都需要打开和关闭过于繁琐,可以使用with简化过程:
- with open('text.txt','w','utf-8') as file:
- file.write('Python')
不同的打开文件的方式
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(Python 3 不支持)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
写数据要在已打开的文件,且第二个参数为写入,并使用write方法,只能写入字符串,打印写入的方法返回写入字符串长度
- with open('text.txt','w',encoding='utf-8') as file:
- print(file.write('1234'))
- file.write('python')
-
- '''
- 4
- '''
读数据需要在已打开的文件中,第二参数为读或不填,使用read或readline方法,二者都可以加参数控制读取字符个数,而区别在于read无参情况下读取全部,而readline每次只读取一行,重复打印出现下一行,readlines则是将每行内容变为列表
- with open('text.txt','w',encoding='utf-8') as file:
- file.write('I Love Python\n'
- 'I Love World Too\n'
- 'I Don\'t Like Work')
- with open('text.txt') as file:
- print(file.read())
-
- '''
- I Love Python
- I Love World Too
- I Don't Like Work
- '''
从下面可以看出,读使用的细节
- with open('text.txt','w',encoding='utf-8') as file:
- file.write('I Love Python\n'
- 'I Love World Too\n'
- 'I Don\'t Like Work\n'
- 'I Want To Have Happy\n'
- 'I Want To Have money\n'
- 'I Want To Have free\n'
- 'End')
-
- with open('text.txt') as file:
- print('== == == == == == ==')
- print(file.readline())
- print(file.readline())
- print('== == == == == == ==')
- print(file.readline(5))
- print('== == == == == == ==')
- print(file.read(5))
- print('== == == == == == ==')
- print(file.readline(5))
- print('== == == == == == ==')
- print(file.read())
- print('== == == == == == ==')
- print(file.readlines())
-
- '''
- == == == == == == ==
- I Love Python
- I Love World Too
- == == == == == == ==
- I Don
- == == == == == == ==
- 't Li
- == == == == == == ==
- ke Wo
- == == == == == == ==
- rk
- I Want To Have Happy
- I Want To Have money
- I Want To Have free
- End
- == == == == == == ==
- []
- Process finished with exit code 0
- '''
有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中拥有这些功能
格式:
import os
os.需要的功能('参数')
remove | 删除 |
rename | 重命名 |
mkdir | 新建文件夹 |
getcwd | 获取当前目录位置 |
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在Python无法正常处理程序时就会发生一个异常。
异常是Python对象,表示一个错误。
当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
异常演示
- d={'name':'jack','age':18}
- print(d['names'])
-
- '''
- KeyError: 'names'
- '''
- print(a)
-
- '''
- NameError: name 'a' is not defined
- '''
- li=[1,2,3]
- print(li[3])
-
- '''
- IndexError: list index out of range
- '''
- a='12'
- b=5
- print(b>a)
-
- '''
- TypeError: '>' not supported between instances of 'int' and 'str'
- '''
- li=[1,2,3]
- print(li.index(4))
-
- '''
- ValueError: 4 is not in list
- '''
- for i in range
- pass
-
- '''
- SyntaxError:invalid syntax
- '''
- with open('1') as a:
- pass
-
- '''
- FileNotFoundError: [Errno 2] No such file or directory: '1'
- '''
- print(10/0)
-
- '''
- ZeroDivisionError: division by zero
- '''
捕捉异常可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。如果你不想在异常发生时结束你的程序,只需在try里捕获它。
格式:
try:
<语句> #运行别的代码
except <名字>:
<语句> #如果在try部份引发了'name'异常
else:
<语句> #如果没有异常发
- try:
- print(a)
- except NameError as e:
- print('出现异常打印')
- print(e)
- else:
- print('没有异常打印')
- finally:
- print('有没有异常都打印')
-
- '''
- 出现异常打印
- name 'a' is not defined
- 有没有异常都打印
- '''
上个代码中,except后面可以不跟异常类型,表示所有异常,也可以使用元组,包含多个异常,最后的finally,当在try块中抛出一个异常,立即执行finally块代码。
注意语句执行的顺序0
- def func1():
- print("---func1--1---")
- print(num)
- print("---func1--2---")
- def func2():
- print("--func2--1---")
- func1()
- print("--func2--2---")
- # def func3():
- # try:
- # print("---func3--1---")
- # func1()
- # print("--func3--2----")
- # except Exception as result:
- # print(result)
- # print("--func3---3---")
- # func3()
- func2()
-
- '''
- --func2--1---
- ---func1--1---
- NameError: name 'num' is not defined
- '''
- def func1():
- print("---func1--1---")
- print(num)
- print("---func1--2---")
- # def func2():
- # print("--func2--1---")
- # func1()
- # print("--func2--2---")
- def func3():
- try:
- print("---func3--1---")
- func1()
- print("--func3--2----")
- except Exception as result:
- print(result)
- print("--func3---3---")
- func3()
- #func2()
-
- '''
- ---func3--1---
- ---func1--1---
- name 'num' is not defined
- --func3---3---
- '''
使用raise语句自己触发异常
- #案例:输入考生的成绩(0~100)
- def functionName( score ):
- if score < 0 or score >100:
- raise Exception("Invalid score!", score)
- # 触发异常后,后面的代码就不会再执行
- functionName(200)
-
- '''
- Exception: ('Invalid score!', 200)
- '''
通过raise创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式
- class ShortInputException(Exception):
- def __init__(self, length, atleast):
- self.length = length
- self.atleast = atleast
- def main():
- try:
- s = input('请输入 --> ')
- if len(s) < 3:
- # raise引发一个你定义的异常
- raise ShortInputException(len(s), 3)
- except ShortInputException as result: #x这个变量被绑定到了错误的实例
- print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'%
- (result.ength, result.atleast))
- else:
- print('没有异常发生')
- main()
Python 模块(Module),是一个Python文件,以.py 结尾,包含了Python 对象定义和Python语句
使用import或者from import引入
不同目录下的不同模块
- #test01
- def a():
- print('test01,a')
- def _b():
- print('test01,_b')
- def c():
- print('test01,c')
- #test02
- __all__=['a','c']
- def a():
- print('test02,a')
- def b():
- print('test02,b')
- def c():
- print('test02,c')
- #test03
- __all__=['a','_b','c']
- def a():
- print('test03,a')
- def _b():
- print('test03,b')
- def c():
- print('test03,c')
- #test04
- def a():
- print('test04,a')
- def b():
- print('test04,_b')
- def c():
- print('test04,c')
开始验证
- import day05.test01 as t1
- t1.a()
- # t1.b()
- t1.c()
-
- print('== == == == == == == == == ')
- from test02 import *
- a()
- # b()
- c()
- print('== == == == == == == == == ')
-
- from test03 import *
- a()
- _b()
- c()
- print('== == == == == == == == == ')
-
- from test04 import a,c
- a()
- # b()
- c()
-
- '''
- test01,a
- test01,c
- == == == == == == == == ==
- test02,a
- test02,c
- == == == == == == == == ==
- test03,a
- test03,b
- test03,c
- == == == == == == == == ==
- test04,a
- test04,c
- '''
注意:
*表示全部。
模块test01中的函数_b,下划线表示私有,不被导入。
__all__=['函数名'] 是魔幻方法,当被引入的包中有__all__=[ ],里面指定的函数才能被调用,调用的时候使用from模块名 import。
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以空。
__init__.py 用于标识当前文件夹是一个包。导包与模块部分相同
主要是理清区别。