7. 文件及目录操作

一、基本文件操作
1. 创建和打开文件
  • 想要操作文件,首先需要创建或者打开指定文件,并创建文件对象,python提供了open()函数实现这个功能:open(filename, mode, encoding)

    • filename:文件名,绝对路径或相对路径

    • encoding:指定文件打编码方式,默认为GBK

    • mode:可选参数,指定文件的打开方式,默认为r

      说明备注
      r只读方式、文件指针在文件开头文件必须存在
      rb只读打开二进制文件,文件指针在开头文件必须存在
      r+打开文件后可读写文件,文件指针在开头,写时覆盖文件必须存在
      w只写方式打开文件文件存在则覆盖,否则创建
      wb只写打开二进制文件文件存在则覆盖,否则创建
      w+打开文件后清空原有内容,并对该文件有读写权文件存在则覆盖,否则创建
      a追加模式打开文件,文件指针在末尾文件不存在则创建
      ab追加模式打开二进制文件,文件指针在末尾文件不存在则创建
      a+读写模式打开,文件指针在末尾文件不存在则创建
  • 文件操作结束后,要及时关闭文件,避免造成不必要的破坏

    file = open('filename', 'r') # 打开文件
    file.close() # 关闭文件
    
  • 使用with语句打开文件:打开文件要及时关闭、打开文件抛出异常将导致文件不能正常关闭,python提供了with语句,实现无论打开时的情况是什么样,都能保证在with语句结束后相关资源被正常关闭

    with expression as target:
        with-body
    
    • expression:指定一个表达式,可以是打开文件的open()函数
    • target:指定一个变量,将表达式的结果保存到该变量中
    • with-body:是with语句后的一系列操作
2. 向文件中写入内容
  • python的文件对象提供了write()方法,可以向文件中写入内容但要保证文件的打开方式为wa。其中w会清空原文件内容,a会在原文件末尾续写。

    with open('filename', 'a') as file:
        file.wirte("i love python")
    
  • 写入文件后需要close()方法关闭文件,否则写入的内容仍然保存在缓冲区中,并不会立刻保存到文件中,比如:

    with open('filename.txt', 'w+') as file:
        file.write('i love python')
        print(file.read())  # 读不到数据
    

    通过w+创建了一个新的空文件,但是read()方法并不能成功读取到写入的语句。但是,如果使用下面的语句

    with open('filename.txt', 'w+') as file:
        file.write('i love python')
        file.seek(0)
        print(file.readline())
    

    就可以读到数据,因为file.seek(0)将文件指针放置到开头的同时,默认将缓冲区的数据写入到了文件中

  • 通过flush()方法,可以强制将缓冲区中的内容写入到文件中,但并不会改变文件指针的位置,比如下面的代码

    with open('filename.txt', 'w+') as file:
        file.write('i love python')
        file.flush()
        print(file.readline())
    

    也是不能够成功读取到数据的,虽然将内容写入到了文件中,但是由于文件指针处于写入语句的末尾,导致无法直接读取到数据,需要使用下面的代码

    with open('filename.txt', 'w+') as file:
        file.write('i love python')
        file.flush()
        file.seek(0)
        print(file.readline())
    

    才能保证读取到数据。

  • 这一节讲的比较鸡肋,只是做一个笔记防止自己后面出现一些不知道怎么回事的bug,主要就三点

    • 第一点:file.write(string)进行写
    • 第二点:写完之后需要close()方法将缓冲区写入文件
    • 第三点:如果写完之后不想关闭文件就可以进行操作,使用file.seek()调节文件指针,会默认执行了一次file.flush()方法
3. 读取文件中的内容 (文件打开方式为 r r+)
  • **读取指定字符:**文件对象提供file.read([size])方法,读取指定个数的字符。
    • size:可选对象,指定读取的字符数,省略则表示读取全部内容
    • 可以配合file.seek()方法实现读取指定位置、一定字符数的字符
  • **读取一行:**文件对象提供file.readline()方法读取一行数据,通过回车键定义txt文件中的行,以字符串形式,返回文件指针所在位置开始的行内容
  • **读取全部行:**文件对象提供file.readlines()方法读取全部行,返回的是一个字符串列表,列表中的每个元素是文件中的每一行的内容
二、目录操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啥都想学的大学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值