• python3的文件读写模式


    任何一种语言,文件的读写都是非常常见的。python的文件读写非常简单,仅仅一个函数open(file也可以,但是我不常用)。

    先看看官网的解释:

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
    Open file and return a stream. Raise IOError upon failure.

    常用打开模式:

    r 只能读
    r+ 可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容
    w+ 可读可写,如果文件存在,则覆盖整个文件,不存在则创建
    w 只能写,覆盖整个文件,不存在则创建
    a 只能写,从文件底部添加内容 不存在则创建
    a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建

    但是实验发现,这里的r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容不完整。

    test.txt的原始文件如下:

    早上好
    您好
    how are you?

    如果我们在open文件后,没有进行任何读写,则从末尾加入

    1 with open('test.txt', mode='r+', encoding='utf-8') as f:
    2     f.writelines("北京")

    这时文件变成

    北京好
    您好
    how are you?

    如果我们在写之前进行了读操作,则会在末尾加入文件

    1 with open('test.txt', mode='r+', encoding='utf-8') as f:
    2     f.read(1)
    3     f.writelines("北京")

    这时在文件的末尾加入了北京两个字,与我们读多少没有关系。作用上类似a+模式

    早上好
    您好
    how are you?北京

    注意:以r+模式处理文件,容易弄错内容,千万注意

    如果以w+方式打开文件,写入文件后,文件被覆盖或重建,样例

    1 with open('test.txt', mode='w+', encoding='utf-8') as f:
    2     f.write("tianjin")
    3     f.flush()
    4     print(f.readlines())

    得到空[]

    with open('test.txt', mode='w+', encoding='utf-8') as f:
        f.writelines("天津")
        f.writelines('山东')
        f.flush()
        f.seek(0)
        print(f.readlines())

    需要seek才能读取到刚刚写入的内容。

    另外注意 写操作不会自动加入换行符

    读的一行末尾会有换行操作,可以用''.strip()去掉换行符

    with open('test.txt', mode='r', encoding='utf-8') as f:
        for line in f:
            print(line.strip()) 去掉换行

    如果某个文件正在open,就只这时,文件被修改,正在读文件的句柄能读出修改的内容

    1 import time
    2 with open('test.txt', mode='r', encoding='utf-8') as f:
    3     time.sleep(5)
    4     for line in f:
    5         print(line.strip())

    在文件末尾增加文件时,我们的f能读取到最后新增的内容。如果修改已经读取行的内容,若不seek,则读取不到。

    这特点能用户增量读取分析日志文件

  • 相关阅读:
    职场之道
    AlphaBlend
    感动前行——给医学媳妇写的演讲稿(非IT类)
    高等数学积分公式大全
    分析Model2系统心得
    【软考】(六)关系代数
    飞鸽传书官方站点 创立黑马程序猿训练营
    实现简单的二级级联
    const和readonly差别
    Chord算法(原理)
  • 原文地址:https://www.cnblogs.com/yangshl/p/6285942.html
Copyright © 2020-2023  润新知