• 【python入门】异常、文件操作


    【大家好,我是爱干饭的猿,本文重点介绍python入门的异常、文件操作。

    后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】

    上一篇文章:《【python入门】函数,类和对象》

    1. 异常

    1.2 try

    程序运行时出现异常,目的并不是让我们的程序直接终止!
    Python是希望在出现异常时,我们可以编写代码来对异常进行处理!    
    
    try语句
        try:
            代码块(可能出现错误的语句)
        except 异常类型 as 异常名:
            代码块(出现错误以后的处理方式)
        except 异常类型 as 异常名:
            代码块(出现错误以后的处理方式)
        except 异常类型 as 异常名:
            代码块(出现错误以后的处理方式)
        else:
            代码块(没出错时要执行的语句)    
        finally:
            代码块(该代码块总会执行)    
    
        try是必须的 else语句有没有都行
        except和finally至少有一个    
    
    可以将可能出错的代码放入到try语句,这样如果代码没有错误,则会正常执行,
        如果出现错误,则会执行expect子句中的代码,这样我们就可以通过代码来处理异常
        避免因为一个异常导致整个程序的终止  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    else可省略 try必须存在 except、finally至少存在一个

    1.2 抛出异常

    python在报错时,实际是调用了,执行对象时,每个对象内内置了特殊方法,来应对错误,发出提示
    自己也可以做一个抛错机制。

    raise用于向外抛出异常,后跟一个一行类型或异常实例

    raise Exception("抛错内容")
    
    • 1

    此时会终止程序运行

    也可以建立一个实例抛出异常

    class MyEorr(Exception):
        pass
        raise MyEorr("抛错内容")
    
    • 1
    • 2
    • 3

    2. 文件操作

    - 通过Python程序来对计算机中的各种文件进行增删改查的操作
    - I/O(Input / Output)
    - 操作文件的步骤:
        ① 打开文件
        ② 对文件进行各种操作(读、写),然后保存
        ③ 关闭文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.1 文件打开与关闭

    file = open("file_name")
    file.close()
    
    • 1
    • 2
     with ... as 语句
     with open(file_name) as file_obj :
         # 在with语句中可以直接使用file_obj来做文件操作
         # 此时这个文件只能在with中使用,一旦with结束则文件会自动close()
         print(file_obj.read())
    
    • 1
    • 2
    • 3
    • 4
    • 5

    常用方法:

    file_name = 'hello'
    
    try:
        with open(file_name) as file_obj :
            print(file_obj.read())
    except FileNotFoundError:
        print(f'{file_name} 文件不存在~~')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.2 读取文件

    file_name = 'demo2.txt'
    
    try:
        # 调用open()来打开一个文件,可以将文件分成两种类型
        # 一种,是纯文本文件(使用utf-8等编码编写的文本文件)
        # 一种,是二进制文件(图片、mp3、ppt等这些文件)
        # open()打开文件时,默认是以文本文件的形式打开的,但是open()默认的编码为None
        #   所以处理文本文件时,必须要指定文件的编码
        with open(file_name,encoding='utf-8') as file_obj:
            # 通过 read() 来读取文件中的内容
            # 如果直接调用read()它会将文本文件的所有内容全部都读取出来
            #   如果要读取的文件较大的话,会一次性将文件的内容加载到内存中,容易导致内存泄漏
            #   所以对于较大的文件,不要直接调用read()
            # help(file_obj.read)
            # read()可以接收一个size作为参数,该参数用来指定要读取的字符的数量
            #   默认值为-1,它会读取文件中的所有字符
            #   可以为size指定一个值,这样read()会读取指定数量的字符,
            #       每一次读取都是从上次读取到位置开始读取的
            #       如果字符的数量小于size,则会读取剩余所有的
            #       如果已经读取到了文件的最后了,则会返回''空串
            # content = file_obj.read(-1)
            content = file_obj.read(6)
            content = file_obj.read(6)
            content = file_obj.read(6)
            content = file_obj.read(6)
            # print(content)
            # print(len(content))
    except FileNotFoundError :
        print(f'{file_name} 这个文件不存在!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    # 读取大文件的方式
    file_name = 'demo.txt'
    
    try:
        with open(file_name,encoding='utf-8') as file_obj:
            # 定义一个变量,来保存文件的内容
            file_content = ''
            # 定义一个变量,来指定每次读取的大小
            chunk = 100
            # 创建一个循环来读取文件内容
            while True:
                # 读取chunk大小的内容
                content = file_obj.read(chunk)
    
                # 检查是否读取到了内容
                if not content:
                    # 内容读取完毕,退出循环
                    break
    
                # 输出内容
                # print(content,end='')
                file_content += content
    
    except FileNotFoundError :
        print(f'{file_name} 这个文件不存在!')
    
    
    print(file_content)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2.3 行读取

    import pprint
    import os
    file_name = 'demo.txt'
    
    with open(file_name , encoding='utf-8') as file_obj:
        # readline()
        # 该方法可以用来读取一行内容
        # print(file_obj.readline(),end='')
        # print(file_obj.readline())
        # print(file_obj.readline())
    
        # readlines()
        # 该方法用于一行一行的读取内容,它会一次性将读取到的内容封装到一个列表中返回
        # r = file_obj.readlines()
        # pprint.pprint(r[0])
        # pprint.pprint(r[1])
        # pprint.pprint(r[2])
    
        for t in file_obj:
            print(t)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2.4 文件写入

    file_name = 'demo5.txt'
    
    # 使用open()打开文件时必须要指定打开文件所要做的操作(读、写、追加)
    # 如果不指定操作类型,则默认是 读取文件 , 而读取文件时是不能向文件中写入的
    # r 表示只读的
    # w 表示是可写的,使用w来写入文件时,如果文件不存在会创建文件,如果文件存在则会截断文件
    #   截断文件指删除原来文件中的所有内容
    # a 表示追加内容,如果文件不存在会创建文件,如果文件存在则会向文件中追加内容
    # x 用来新建文件,如果文件不存在则创建,存在则报错
    # + 为操作符增加功能
    #   r+ 即可读又可写,文件不存在会报错
    #   w+
    #   a+
    # with open(file_name , 'w' , encoding='utf-8') as file_obj:
    # with open(file_name , 'r+' , encoding='utf-8') as file_obj:
    with open(file_name , 'x' , encoding='utf-8') as file_obj:
        # write()来向文件中写入内容,
        # 如果操作的是一个文本文件的话,则write()需要传递一个字符串作为参数
        # 该方法会可以分多次向文件中写入内容
        # 写入完成以后,该方法会返回写入的字符的个数
        file_obj.write('aaa\n')
        file_obj.write('bbb\n')
        file_obj.write('ccc\n')
        r = file_obj.write(str(123)+'123123\n')
        r = file_obj.write('今天天气真不错')
        print(r)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    2.5 读取二进制文件

    file_name = 'c:/Users/lilichao/Desktop/告白气球.flac'
    
    # 读取模式
    # t 读取文本文件(默认值)
    # b 读取二进制文件
    
    with open(file_name , 'rb') as file_obj:
        # 读取文本文件时,size是以字符为单位的
        # 读取二进制文件时,size是以字节为单位
        # print(file_obj.read(100))
    
        # 将读取到的内容写出来
        # 定义一个新的文件
        new_name = 'aa.flac'
    
        with open(new_name , 'wb') as new_obj:
    
            # 定义每次读取的大小
            chunk = 1024 * 100
    
            while True :
                # 从已有的对象中读取数据
                content = file_obj.read(chunk)
    
                # 内容读取完毕,终止循环
                if not content :
                    break
    
                # 将读取到的数据写入到新对象中
                new_obj.write(content)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    2.6 文件当前读取位置

    with open('demo.txt','rb') as file_obj:
        # print(file_obj.read(100))
        # print(file_obj.read(30))
    
        # seek() 可以修改当前读取的位置
        file_obj.seek(55)
        file_obj.seek(80,0)
        file_obj.seek(70,1)
        file_obj.seek(-10,2)
        # seek()需要两个参数
        #   第一个 是要切换到的位置
        #   第二个 计算位置方式
        #       可选值:
        #           0 从头计算,默认值
        #           1 从当前位置计算
        #           2 从最后位置开始计算
    
        print(file_obj.read())
    
        # tell() 方法用来查看当前读取的位置
        print('当前读取到了 -->',file_obj.tell())
    
    with open('demo2.txt','rt' , encoding='utf-8') as file_obj:
        # 中文字符 一个字符=3字节
        # print(file_obj.read(100))
        # print(file_obj.read(30))
    
        # seek() 可以修改当前读取的位置
        file_obj.seek(9)
        # seek()需要两个参数
        #   第一个 是要切换到的位置
        #   第二个 计算位置方式
        #       可选值:
        #           0 从头计算,默认值
        #           1 从当前位置计算
        #           2 从最后位置开始计算
    
        print(file_obj.read())
    
        # tell() 方法用来查看当前读取的位置
        print('当前读取到了 -->',file_obj.tell())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    2.7 文件其他调用操作

    import os
    from pprint import pprint
    
    # os.listdir() 获取指定目录的目录结构
    # 需要一个路径作为参数,会获取到该路径下的目录结构,默认路径为 . 当前目录
    # 该方法会返回一个列表,目录中的每一个文件(夹)的名字都是列表中的一个元素
    r = os.listdir()
    
    # os.getcwd() 获取当前所在的目录
    r = os.getcwd()
    
    # os.chdir() 切换当前所在的目录 作用相当于 cd
    # os.chdir('c:/')
    
    # r = os.getcwd()
    
    # 创建目录
    # os.mkdir("aaa") # 在当前目录下创建一个名字为 aaa 的目录
    
    # 删除目录
    # os.rmdir('abc')
    
    # open('aa.txt','w')
    # 删除文件
    # os.remove('aa.txt')
    
    # os.rename('旧名字','新名字') 可以对一个文件进行重命名,也可以用来移动一个文件
    # os.rename('aa.txt','bb.txt')
    os.rename('bb.txt','c:/users/lilichao/desktop/bb.txt')
    
    pprint(r)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3. python加入数据库

        try:
            # 打开数据库连接
            db = pymysql.connect(host='localhost', port=3308, user='root', passwd='', db='car', charset='utf8')
            #这里最好用关键字输入,方便定位,我尝试不加关键字的话,会报错
        except:
            print("数据库连接失败")
            return
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()
        # SQL 修改语句
    #增
        sql = "INSERT INTO cars(id,\
           carNumber, c_type, state, in_t, out_t) \
           VALUES (null, '%s', '%s', '%s', '%s', '%s')" % \
              (carNumber, m_type, state, int_t, out_t)
    #改
        sql ="update cars set state='go',out_t='%s' \
        where '%s'=carNumber and state='in'" % (out_t, carNumber)
    
        # 关闭数据库连接
        db.close()
        try:
            # 执行sql语句
            cursor.execute(sql)
            # 提交到数据库执行
            db.commit()
            print("数据库写入成功")
        except:
            # 如果发生错误则回滚
            db.rollback()
            print("数据库写入失败")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
        try:
            # 打开数据库连接
            db = pymysql.connect(host='localhost', port=3308, user='root', passwd='', db='car', charset='utf8')
        except:
            print("数据库连接失败")
            return
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()
    #查
        sql = "select id from cars where '%s'=carNumber and state='in'" % carNumber
        cursor.execute(car_sql)
        car_card = cursor.fetchone()
        #返回的是一个列表
        # fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
        # fetchall(): 接收全部的返回结果行.
        # rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
        result_id = int(car_card[0])
         # 关闭数据库连接
        db.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    【AI Business Model】人工智能的定义 | 了解 AI 的历史 | 简单理解什么是 “图灵测试“
    (10) 朴素贝叶斯
    2023/9/12 -- C++/QT
    LeetCode 双周赛 104(2023/05/13)流水的动态规划,铁打的结构化思考
    【DL】Windows 10系统下安装TensorRT教程
    ebay运营思路|学会这些技巧,新店铺销量翻倍
    Web前端工程师应该掌握哪些技能及知识点?
    快消品b2b电子商务网站建设方案
    47-用户和权限管理
    计算机组成原理(4)-----Cache的原理及相关知识点
  • 原文地址:https://blog.csdn.net/m0_62218217/article/details/134042725