在python3.x中使用两个file对象读写文件

2024-04-25 03:56:20 发布

您现在位置:Python中文网/ 问答频道 /正文

f=open('filename','mode')

“w”模式将创建一个文件并将其打开以进行写入(最终无法使用相同的文件对象读取) “r+”模式将打开文件进行读写,但是如果文件尚未存在,则不会创建新文件,而是返回错误。在

现在考虑一下这个场景。。。 我想创建一个文件,并想打开它读和写。。在

这是一种方法,它确实有效。。。在

f = open('filename', 'w')
f.close()
f = open('filename', 'r+')

我尝试了另一种方法。。在

^{pr2}$

是的,它没有像我预期的那样工作(类似于管道)

我的问题是

函数f2.read()是否尝试直接从磁盘或已可用的文件缓冲缓存中读取?

更新后的文件什么时候写回磁盘? 很明显,f1.close()将从内存缓冲区更新磁盘中的文件。但是有没有一种方法可以手动强制磁盘写入?

所以它的工作原理如下

f1.write('test string')
#force disk write
f2.read('test string') #now it should read correct data

Tags: 文件对象方法testclosereadstringmode
2条回答

使用f.flush()可以刷新文件数据而不必关闭

现在我想要的类似管道的行为可以实现如下

>>> f1 = open('filename','w')
>>> f2 = open('filename', 'r')
>>> f1.write('test string')
11
>>> f1.flush()
>>> f2.read()
'test string'

我还有两个问题没有回答。。在

函数f2.read()是否尝试直接从磁盘或已可用的文件缓冲缓存中读取?

更新后的文件什么时候写回磁盘?

我很快就会找到的。。。在

您可以用'open(filename,“w+”)打开文件进行读写:

>>> f = open('hello.txt', 'w+')
>>> f.write('hello world\n')
12
>>> f.seek(0)
0
>>> f.read()
'hello world\n'
>>> 

需要调用“seek”,因为file对象有一个用于读和写的“current position”,seek调用会将当前文件位置重置为文件的开头,以便能够读取您刚刚写入的内容。在

请注意,您可以在再次写入时覆盖现有数据,除非您返回到文件的末尾。如果只想将数据追加到文件中,可以使用模式“a+”而不是“w+”。在

相关问题 更多 >