• Python文件操作(02):打开文件、读文件、关闭文件


    一、读文本文件

    1. 打开文件
    2. 读文件内容
    3. 关闭文件

    1、在读取文件内容后进行解码操作

    1. """
    2. 1. 打开文件
    3. - 路径:
    4. 相对路径:当前项目(读文件.py)所在的目录下查找需要读取的文件
    5. 绝对路径:文件--右键--Copy Path/Reference--Absolute Path
    6. - 模式:
    7. rb,表示读取文件原始的二进制(r,读 read;b,二进制 binary)
    8. """
    9. # 1 打开文件
    10. # file_object = open('info.txt', mode='rb') # 使用相对路径
    11. file_object = open('D:/pythonProject/文件操作/info.txt', mode='rb') # 使用绝对路径
    12. # 2 读取文件内容
    13. data = file_object.read()
    14. # 3 关闭文件(在Python文件操作中,使用open()函数打开文件后需要及时关闭文件。如果程序在将文件对象用完后未关闭它,就可能会导致数据丢失、系统资源占用过多,严重时可能会导致系统崩溃。)
    15. file_object.close()
    16. print(data) # 读取内容后获得的是二进制内容b'\xe8\xbf\x99\xe6\x98'
    17. # 4 对内容进行二进制解码操作(使用encode编码成二进制)
    18. text = data.decode()
    19. print(text)
    20. """
    21. 注意:
    22. 如果open文件时不传mode,则默认是gbk,会报解码错误
    23. UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 8: illegal multibyte sequence
    24. """

    2、在打开文件时传入编码格式

    1. """
    2. windows环境使用绝对路径
    3. 1 可以将 \ 修改成 /
    4. 2 可以将 \ 修改成 \\
    5. 3 可以在路径前加 r
    6. """
    7. # 1 打开文件
    8. file_object = open(r'D:\pythonProject\文件操作\info.txt', encoding='utf-8') # 不加mode,默认以只读方式打开(mode='r')
    9. # 2 读取文件内容
    10. data = file_object.read()
    11. # 3 关闭文件
    12. file_object.close()
    13. print(data)

    3、确定读取的文件是否存在?

    1. import os
    2. is_exists = os.path.exists('info.txt')
    3. print(is_exists) # True
    4. not_exists = os.path.exists('info1.txt')
    5. print(not_exists) # False

    二、文件打开模式

    文件内容存储一般是Unicode编码,使用的是16位二进制数字表示所有字符

    • 只读:r(读的是gbk)、rt(读的是gbk)、rb(读取文件原始的二进制)
      • 存在,读(open时不会清空内容)
      • 不存在,报错
    • 只写:w(写文本)、wt(写文本)、wb(写二进制)
      • 存在,(open时)清空再写
      • 文件不存在,创建再写
    • 只写:a、at、ab【尾部追加】
      • 存在,不清空内容,尾部追加
      • 不存在,创建再写
    • 读写:既可读又可写
      • r+、rt+、rb+,默认光标位置:起始位置
      • w+、wt+、wb+,默认光标位置:起始位置(清空文件)
        1. file_object = open('info.txt', mode='wt+', encoding='utf-8')
        2. # w模式:先清空文件,再写入内容
        3. data = file_object.read()
        4. print(data) # 文件内容清空后输出是空
        5. # 写入内容
        6. file_object.write("这是我第一次写入的内容")
        7. # 将光标位置重置为起始位置
        8. file_object.seek(0)
        9. """
        10. 写入内容后默认光标位置是写入内容的最后位置
        11. 所以读取文件内容从写入内容的最后位置开始读
        12. 如果不重置光标位置,则读取得内容是空
        13. """
        14. data = file_object.read()
        15. print(data)
      • a+、ab+,默认光标位置:末尾        

    模式是r/rt,w/wt,a/at在打开文件时需要加encoding

    模式是rb,wb,ab在打开文件时不能加encoding,rb在读完文件后进行decode,wb在写入内容时encode

  • 相关阅读:
    Var let const 重复声明问题,以及三种区别
    【爬虫】力扣每日一题每天自动邮件提醒!!!
    【python】TCP socket服务器 Demo
    [问题解决] java中InputStream转为MultipartFile
    三款免费的AI绘画网站对比分析,真正好用的居然是它
    Flow深入浅出系列之使用Kotlin Flow自动刷新Android数据的策略
    搭建自己的Docker Harbor镜像仓库
    Mybatis的动态SQL和分页
    mysql5.7.35安装配置教程【超级详细安装教程】
    vue--配置根目录(用@代表src目录)
  • 原文地址:https://blog.csdn.net/qq_23440467/article/details/132809729