• Day25 Python的文件操作和异常处理


    系列文章目录

    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的文件操作和异常处理


    目录

    前言

    一、文件操作

    1.文件的打开与关闭

     2.写数据

     3.读数据

     4.文件和文件夹的操作

    二、异常

    1.什么是异常

    2.异常处理

    3.异常传递

     4.异常触发

     5.用户自定义异常

     三、模块

    1.模块的引入

    四、包

    总结


    前言

            本节介绍在python中文件的操作,文件的作用是存储数据。而异常是程序报错后的处理。因为一旦一条语句出错,接下来的代码都不再执行,所以需要异常处理。


    一、文件操作

    1.文件的打开与关闭

    正常的步骤为:新建文件->写入数据->关闭文件

    使用open函数,可以打开一个已经存在的文件,或者创建一个新文件open(文件名,访问模式)

    open中第一个参数为文件名,第二个参数为打开文件的方式,第三个是编码格式,注意要加上encoding=,同时值都为字符串,关于第二个参数,r为读,w为写,如果不定义第二个参数,默认为读,读只能读存在的文件,不然会报错

    1. #打开文件,如果没有这个文件就新建一个
    2. file=open('text.txt','w')
    3. #写入数据
    4. print(file.write('hello world'))
    5. #关闭文件
    6. file.close()
    7. #打开文件
    8. file=open('text.txt','r')
    9. #读取文件内容
    10. print(file.read())
    11. #关闭文件
    12. file.close()
    13. '''
    14. 11
    15. hello world
    16. '''

     读写文件每次都需要打开和关闭过于繁琐,可以使用with简化过程:

    1. with open('text.txt','w','utf-8') as file:
    2. file.write('Python')

    不同的打开文件的方式

    t文本模式 (默认)。
    x写模式,新建一个文件,如果该文件已存在则会报错。
    b二进制模式。
    +打开一个文件进行更新(可读可写)。
    U通用换行模式(Python 3 不支持)。
    r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
    r+打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
    w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
    wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

     2.写数据

    写数据要在已打开的文件,且第二个参数为写入,并使用write方法,只能写入字符串,打印写入的方法返回写入字符串长度

    1. with open('text.txt','w',encoding='utf-8') as file:
    2. print(file.write('1234'))
    3. file.write('python')
    4. '''
    5. 4
    6. '''

     3.读数据

    读数据需要在已打开的文件中,第二参数为读或不填,使用read或readline方法,二者都可以加参数控制读取字符个数,而区别在于read无参情况下读取全部,而readline每次只读取一行,重复打印出现下一行,readlines则是将每行内容变为列表

    1. with open('text.txt','w',encoding='utf-8') as file:
    2. file.write('I Love Python\n'
    3. 'I Love World Too\n'
    4. 'I Don\'t Like Work')
    5. with open('text.txt') as file:
    6. print(file.read())
    7. '''
    8. I Love Python
    9. I Love World Too
    10. I Don't Like Work
    11. '''

     从下面可以看出,读使用的细节

    1. with open('text.txt','w',encoding='utf-8') as file:
    2. file.write('I Love Python\n'
    3. 'I Love World Too\n'
    4. 'I Don\'t Like Work\n'
    5. 'I Want To Have Happy\n'
    6. 'I Want To Have money\n'
    7. 'I Want To Have free\n'
    8. 'End')
    9. with open('text.txt') as file:
    10. print('== == == == == == ==')
    11. print(file.readline())
    12. print(file.readline())
    13. print('== == == == == == ==')
    14. print(file.readline(5))
    15. print('== == == == == == ==')
    16. print(file.read(5))
    17. print('== == == == == == ==')
    18. print(file.readline(5))
    19. print('== == == == == == ==')
    20. print(file.read())
    21. print('== == == == == == ==')
    22. print(file.readlines())
    23. '''
    24. == == == == == == ==
    25. I Love Python
    26. I Love World Too
    27. == == == == == == ==
    28. I Don
    29. == == == == == == ==
    30. 't Li
    31. == == == == == == ==
    32. ke Wo
    33. == == == == == == ==
    34. rk
    35. I Want To Have Happy
    36. I Want To Have money
    37. I Want To Have free
    38. End
    39. == == == == == == ==
    40. []
    41. Process finished with exit code 0
    42. '''

     4.文件和文件夹的操作

    有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中拥有这些功能

    格式:

    import os

    os.需要的功能('参数')

    remove删除
    rename重命名
    mkdir新建文件夹
    getcwd获取当前目录位置

    二、异常

    1.什么是异常

    异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
    一般情况下,在Python无法正常处理程序时就会发生一个异常。
    异常是Python对象,表示一个错误。
    当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

    异常演示

    1. d={'name':'jack','age':18}
    2. print(d['names'])
    3. '''
    4. KeyError: 'names'
    5. '''
    1. print(a)
    2. '''
    3. NameError: name 'a' is not defined
    4. '''
    1. li=[1,2,3]
    2. print(li[3])
    3. '''
    4. IndexError: list index out of range
    5. '''
    1. a='12'
    2. b=5
    3. print(b>a)
    4. '''
    5. TypeError: '>' not supported between instances of 'int' and 'str'
    6. '''
    1. li=[1,2,3]
    2. print(li.index(4))
    3. '''
    4. ValueError: 4 is not in list
    5. '''
    1. for i in range
    2. pass
    3. '''
    4. SyntaxError:invalid syntax
    5. '''
    1. with open('1') as a:
    2. pass
    3. '''
    4. FileNotFoundError: [Errno 2] No such file or directory: '1'
    5. '''
    1. print(10/0)
    2. '''
    3. ZeroDivisionError: division by zero
    4. '''

    2.异常处理

    捕捉异常可以使用try/except语句。
    try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

    如果你不想在异常发生时结束你的程序,只需在try里捕获它。

    格式:
    try:
            <语句> #运行别的代码
    except <名字>:
            <语句> #如果在try部份引发了'name'异常
    else:
            <语句> #如果没有异常发

    1. try:
    2. print(a)
    3. except NameError as e:
    4. print('出现异常打印')
    5. print(e)
    6. else:
    7. print('没有异常打印')
    8. finally:
    9. print('有没有异常都打印')
    10. '''
    11. 出现异常打印
    12. name 'a' is not defined
    13. 有没有异常都打印
    14. '''

     上个代码中,except后面可以不跟异常类型,表示所有异常,也可以使用元组,包含多个异常,最后的finally,当在try块中抛出一个异常,立即执行finally块代码。

    3.异常传递

    注意语句执行的顺序0

    1. def func1():
    2. print("---func1--1---")
    3. print(num)
    4. print("---func1--2---")
    5. def func2():
    6. print("--func2--1---")
    7. func1()
    8. print("--func2--2---")
    9. # def func3():
    10. # try:
    11. # print("---func3--1---")
    12. # func1()
    13. # print("--func3--2----")
    14. # except Exception as result:
    15. # print(result)
    16. # print("--func3---3---")
    17. # func3()
    18. func2()
    19. '''
    20. --func2--1---
    21. ---func1--1---
    22. NameError: name 'num' is not defined
    23. '''
    1. def func1():
    2. print("---func1--1---")
    3. print(num)
    4. print("---func1--2---")
    5. # def func2():
    6. # print("--func2--1---")
    7. # func1()
    8. # print("--func2--2---")
    9. def func3():
    10. try:
    11. print("---func3--1---")
    12. func1()
    13. print("--func3--2----")
    14. except Exception as result:
    15. print(result)
    16. print("--func3---3---")
    17. func3()
    18. #func2()
    19. '''
    20. ---func3--1---
    21. ---func1--1---
    22. name 'num' is not defined
    23. --func3---3---
    24. '''

     4.异常触发

    使用raise语句自己触发异常

    1. #案例:输入考生的成绩(0~100)
    2. def functionName( score ):
    3. if score < 0 or score >100:
    4. raise Exception("Invalid score!", score)
    5. # 触发异常后,后面的代码就不会再执行
    6. functionName(200)
    7. '''
    8. Exception: ('Invalid score!', 200)
    9. '''

     5.用户自定义异常

    通过raise创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式

    1. class ShortInputException(Exception):
    2. def __init__(self, length, atleast):
    3. self.length = length
    4. self.atleast = atleast
    5. def main():
    6. try:
    7. s = input('请输入 --> ')
    8. if len(s) < 3:
    9. # raise引发一个你定义的异常
    10. raise ShortInputException(len(s), 3)
    11. except ShortInputException as result: #x这个变量被绑定到了错误的实例
    12. print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'%
    13. (result.ength, result.atleast))
    14. else:
    15. print('没有异常发生')
    16. main()

     三、模块

    Python 模块(Module),是一个Python文件,以.py 结尾,包含了Python 对象定义和Python语句

    1.模块的引入

    使用import或者from  import引入

    不同目录下的不同模块

    1. #test01
    2. def a():
    3. print('test01,a')
    4. def _b():
    5. print('test01,_b')
    6. def c():
    7. print('test01,c')
    1. #test02
    2. __all__=['a','c']
    3. def a():
    4. print('test02,a')
    5. def b():
    6. print('test02,b')
    7. def c():
    8. print('test02,c')
    1. #test03
    2. __all__=['a','_b','c']
    3. def a():
    4. print('test03,a')
    5. def _b():
    6. print('test03,b')
    7. def c():
    8. print('test03,c')

    1. #test04
    2. def a():
    3. print('test04,a')
    4. def b():
    5. print('test04,_b')
    6. def c():
    7. print('test04,c')

     开始验证

    1. import day05.test01 as t1
    2. t1.a()
    3. # t1.b()
    4. t1.c()
    5. print('== == == == == == == == == ')
    6. from test02 import *
    7. a()
    8. # b()
    9. c()
    10. print('== == == == == == == == == ')
    11. from test03 import *
    12. a()
    13. _b()
    14. c()
    15. print('== == == == == == == == == ')
    16. from test04 import a,c
    17. a()
    18. # b()
    19. c()
    20. '''
    21. test01,a
    22. test01,c
    23. == == == == == == == == ==
    24. test02,a
    25. test02,c
    26. == == == == == == == == ==
    27. test03,a
    28. test03,b
    29. test03,c
    30. == == == == == == == == ==
    31. test04,a
    32. test04,c
    33. '''

     注意:

    *表示全部。

    模块test01中的函数_b,下划线表示私有,不被导入。

    __all__=['函数名'] 是魔幻方法,当被引入的包中有__all__=[ ],里面指定的函数才能被调用,调用的时候使用from模块名 import。

    四、包

    包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
    简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以空。
    __init__.py 用于标识当前文件夹是一个包。

    导包与模块部分相同


    总结

            主要是理清区别。

  • 相关阅读:
    FISCOBCOS 控制台全部命令
    软件设计师2018上午题基础知识(易错整理)
    Spring IOC/DI和MVC及若依对应介绍
    SARScape使用GACOS数据
    P1004 [NOIP2000 提高组] 方格取数
    【JavaWeb】案例:读取 WEB 工程下的资源文件、文件下载、点击切换验证码
    Face Global | 创龙科技2款新品登陆TI全球官网
    【C++】常用拷贝和替换算法
    Python 3.11比3.10 快60%:使用冒泡排序和递归函数对比测试
    面试官:Spring中都应用了哪些设计模式?
  • 原文地址:https://blog.csdn.net/lookout99/article/details/126427294