• Python基础语法(五)—— 文件基本操作(打开、写入、关闭、查找)



    文件

    1. 什么是文件?

    我们平时所创建的变量都是保存在内存中的,我们知道如果重启应用或者重启机器,内存中的数据就会丢失。
    如果想让数据能够持久化存储,就可以把数据保存到文件或者是数据库中。

    比如windows上,通过后缀名可以看到常见的文件类型有:

    • 可执行文件(exe)
    • 文本文件(txt)
    • 图片文件(jpg、png)
    • office文件 (.ppt、.xlsx)

    2. 文件路径

    一个机器上,会存在很多文件,为了让这些文件更方便的管理和组织,往往会使用很多的“文件夹”,也就是我们平常所说的目录

    为了更家准确的确定一个文件的位置,就可以使用文件路径
    在这里插入图片描述

    D:\root\PyCharm Community Edition 2022.1\bin\pycharm64.exe这就是PyCharm软件的绝对路径

    • D:表示的是盘符,不区分大小写
    • 每一个\表示一级目录
    • 在 windows中目录之间的分割符,可以用/也可以用\
    • 这里是是介绍来了绝对路径,和它对应的是相对路径,用../来表示上一级路径,./表示当前路径

    3. 文件操作

    要想使用文件,主要是通过文件来保存数据,在需要的时候把保存的数据读取出来
    但是想要读写文件,需要先打开文件,读写完毕之后一定要记得关闭文件,防止文件资源泄露

    1) 打开文件

    使用内置函数open打开文件

    file = open('D:/root/test.txt', 'r')
    print(type(file))
    # 运行结果
    <class '_io.TextIOWrapper'>
    
    • 1
    • 2
    • 3
    • 4
    • 第一个参数是字符串,表示要打开文件路径
    • 第二个参数也是一个字符串,表示文件打开的方式,其中r表示只读,w表示按照写方式打开,a表示追加的方式打开
    • 如果文件打开成功,就会返回一个文件对象,后续的读写文件操作都是围绕着这个文件对象操作
    • 如果打开文件败(比如路径写错了或者文件压根不存在),就会抛出异常

    2) 关闭文件

    是用文件对象.close方法关闭已经打开的文件

    file = open('D:/root/test.txt', 'r')
    file.close()
    
    • 1
    • 2

    使用完一个文件一定要记得及时关闭
    一个程序同时打开的文件个数是存在上限的!

    my_list = []
    count = 0
    while True:
        file = open('D:/root/test.txt', 'r')
        my_list.append(file)
        count += 1
        print(f'file{count}')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    如果一直循环打开文件不关闭的话,达到一定数量就会抛出异常

    注意:上面的每个文件对象都用列表保存起来了,如果不保存就不会抛出异常,因为Python内置的垃圾回收机制,会在文件对象销毁的时候自动关闭所有文件
    但是垃圾回收机制不一定及时,所以写代码不要依赖垃圾回收机制

    3) 写文件

    • 如果要写文件,就要以写的方式打开,把第二个参数设置为w
    • 使用write方法写数据
    file = open('D:/root/test.txt', 'w')
    file.write('hello world')
    file.close()
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    用记事本打开test.txt文件就能查看被写进去的数据

    • 如果使用r方式打开文件,则写入时就会抛出异常
    • 使用w一旦打开文件 成功,就会清空文件原有的数据
    • 使用a实现“追加写入”,此时原有内容不变,写入的额内容会存在于之前文件内容的末尾
    file = open('D:/root/test.txt', 'w')
    file.write('hello world')
    file.close()
    
    file = open('D:/root/test.txt', 'a')
    file.write('\n你好世界')
    file.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    • 针对已经关闭 的文件对象进行写操作也会抛出异常

    4) 读文件

    • 读文件需要使用r的方式打开文件
    • 使用read方法完成操作,参数表示读取几个字符,不填参数则是默认读取整个文件
    file = open('D:/root/test.txt', 'r')
    tmp = file.read(5)
    print(tmp)
    
    • 1
    • 2
    • 3
    • 如果读取文件的时候遇到编码方式报错,可以手动指定的读取文件的编码方式
    file = open('D:/root/test.txt', 'r', encoding='utf8')
    tmp = file.read()
    print(tmp)
    
    • 1
    • 2
    • 3
    • 如果是多行文本,可以使用for循环一次读取一行
    file = open('D:/root/test.txt', 'r', encoding='utf8')
    count = 1
    for tmp in file:
        print(f'第{count}行:{tmp}', end='')
        count += 1
    file.close()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 使用readlines直接把整个文件内容读取出来,返回一个列表,每个元素为一行
    file = open('D:/root/test.txt', 'r', encoding='utf8')
    
    lists = file.readlines()
    print(lists)
    print(type(lists))
    file.close()
    # 运行结果
    ['hello world\n', '你好世界\n', '测试\n', '文件\n', '读写\n', '\n', '上面是空行']
    <class 'list'>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4. 使用上下文管理器

    当打开文件之后,有的时候老是忘记关闭文件对象,于是Python提供了上下文管理器,来帮助程序员自动关闭文件(类似于Java的try)

    • 使用with语句打开文件
    • with内部的代码块执行完毕后, 就会自动调用关闭方法
    with open('D:/root/test.txt', 'r', encoding='utf8') as file:
        lines = file.readline()
        print(lines)
    
    • 1
    • 2
    • 3

    上下文管理器起到的效果就是一个监控,当 with对应的代码块执行完毕后,就会自动执行 文件对象的 close方法

    5. 实现文件查找工具

    指定一个待搜索的文件路径,同时指定一个要搜索的文件关键字
    在待搜索路径中查找是否文件名中包含这个关键字

    • 使用os.walk即可实现目录的递归遍历,不需要手动写递归
    • os.walk 返回一个三元组, 分别是 当前路径 , **当前路径下包含的目录名 **(多个), 当前路径下包含的文件名 (多个)
    
    import os
    path = input('请输入要搜索的绝对路径:')
    keyword = input('请输入要查找的文件名的关键字:')
    '''
    dir_path:遍历到当前位置的绝对路径啥
    dir_names:当前路径下都有哪些目录
    file_names:当前目录下都有哪些文件(保存的是文件命名)
    '''
    for dir_path, dir_names, file_names in os.walk(path):
        for f_name in file_names:
            if keyword in f_name:
                print(f'{dir_path}/{f_name}')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

  • 相关阅读:
    iMazing 2 .17.9最新官方中文版免费下载安装激活
    GitHub标星65k,阿里面试核心技术手册,我不允许还有人没看过!
    阿里、美团、拼多多、网易大厂面试之Redis+多线程+JVM+微服务...
    基于SSM的小区疫情防控管理系统设计与实现
    python列表和元组的作业
    MTK平台Metadata的加载(4)—Q版本后
    【pytest】conftest.py使用
    MySQL中的行锁
    react-router v6
    【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter24-编写简单的脚本实用工具
  • 原文地址:https://blog.csdn.net/weixin_53946852/article/details/126817745