• Python文件操作(04):常见功能


    一、read,读

    1、读所有

    1. f = open('info.txt', mode='r', encoding='utf-8') # 模式是r/rt,必须在内部使用encoding将文本转换成字符串类型
    2. data = f.read()
    3. f.close()
    4. f = open('info.txt', mode='rb') # 模式是rb,不能加encoding,否则报错;可以对读取的内容进行解码,否则得到的就是二进制内容
    5. data = f.read()
    6. f.close()

    2、读n个字符(字节)

    1. f = open('info.txt', mode='r', encoding='utf-8')
    2. # 读1个字符
    3. data = f.read(1)
    4. f.close()
    5. print(data)
    6. f2 = open('info.txt', mode='rb')
    7. # 读1个字节
    8. data2 = f2.read(1)
    9. f2.close()
    10. print(data2)

    二、readline,读一行

    1. """
    2. readline() 从光标位置开始,每次只读取一行
    3. """
    4. f = open('info.txt', mode='r', encoding='utf-8')
    5. # 读一行
    6. v1 = f.readline()
    7. v2 = f.readline()
    8. print(v1) # 这是我第一次写入的内容
    9. print(v2) # 22112
    10. f.close()
    11. """
    12. 由于上面打开文件后关闭了
    13. 下面再次打开文件
    14. 光标从首行的内容头开始
    15. """
    16. f2 = open('info.txt', mode='r', encoding='utf-8')
    17. # 读一行
    18. v3 = f2.readline()
    19. print(v3) # 这是我第一次写入的内容
    20. f2.close()

    三、readlines,读所有行,每行作为列表的一个元素

    1. f = open('info.txt', mode='r', encoding='utf-8')
    2. # 读所有行
    3. v1 = f.readlines()
    4. print(v1) # ['这是我第一次写入的内容\n', '22112']
    5. f.close()

    四、循环,读大文件

    1. f = open('info.txt', mode='r', encoding='utf-8')
    2. # 循环读大文件内容
    3. for line in f:
    4. print(line.strip()) # 使用strip函数取消换行
    5. f.close()

    五、flush,刷到磁盘

    1. 使用write不是写到了硬盘,而是写在缓冲区,系统会将缓冲区的内容刷到硬盘
    2. flush立即将缓冲区的数据刷到硬盘
    1. f = open('files/account.txt', mode='a', encoding='utf-8') # 不清空内容尾部追加,不加encoding写入的中文字符会是乱码
    2. while True:
    3. user = input("请输入用户名:")
    4. if user.upper() == 'Q':
    5. break
    6. pwd = input("请输入密码:")
    7. data = "{}-{}\n".format(user, pwd)
    8. f.write(data)
    9. # 立即将缓冲区数据刷到硬盘
    10. f.flush()
    11. f.close()

    六、移动光标位置

    1. f = open('info.txt', mode='r+', encoding='utf-8') # r+可读可写,open时不清空内容
    2. # 移动光标位置,在光标之后覆盖式写内容(如:你好中国,则会使用徐伟将好中覆盖)
    3. # 移动到指定字节位置(一个中文字符代表三个字节)
    4. f.seek(3)
    5. f.write("徐伟")
    6. f.close()

    注意:a模式打开,永远先将光标移动到最后,再写内容

    可能出现乱码:中文一个字符等于3个字节,英文一个字符是一个字节(没法使用5个字节覆盖2个中文字符)

    1. f = open('info.txt', mode='r+', encoding='utf-8') # 模式r+,可读可写,open时不清空内容
    2. # info.txt 内容是:你好中国
    3. f.seek(3)
    4. f.write("xuwei") # 从第3个字节往后覆盖式写5个字节内容,由于info.txt全是中文所以不能将字符覆盖全,就会出现乱码
    5. f.close()

    七、获取当前光标的位置

    使用tell获取字节的位置

    1. f = open('info.txt', mode='r+', encoding='utf-8')
    2. # 使用tell获取字节位置
    3. p1 = f.tell()
    4. print(p1) # 0
    5. f.read(3) # 模式是r+,所以读三个字符
    6. p2 = f.tell()
    7. print(p2) # 中文三个字符是9个字节,所以输出:9
    1. f = open('info.txt', mode='rb')
    2. # 使用tell获取字节位置
    3. p1 = f.tell()
    4. print(p1) # 0
    5. f.read(3) # 模式是rb,所以读三个字节
    6. p2 = f.tell()
    7. print(p2) # 3

     

  • 相关阅读:
    Redis入门完整教程:RDB持久化
    GIS海量数据前端加载优化策略
    在群晖上安装Nextcloud-AIO详解
    Leetcode 670. 最大交换
    1017 A除以B
    Mysql 的安装
    2022上海世外ib均分40
    ReactiveUI MVVM框架(1)-Collections
    腾讯小程序音视频 TRTC live-pusher 黑屏等各种问题
    java毕业设计全套基于SSM+Vue的SSM学业预警平台信息管理|学生课程成绩管理系统作业[包运行成功]
  • 原文地址:https://blog.csdn.net/qq_23440467/article/details/132837403