首页 > 代码库 > python3的文件读写模式

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()) 去掉换行

 

python3的文件读写模式