使用Python 3.x中的两个文件对象读取和写入文件

时间:2013-06-28 06:55:59

标签: python file python-3.x

F =开放( '文件名', '模式')

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

现在考虑一下情景...... 我想创建一个文件,并希望打开它来进行阅读和写作..

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

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

我尝试了另一种不同的方式..

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

Ya它没有按照我预期的方式工作(类似于管道)

我的问题是

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

何时将更新后的文件写回磁盘? 很明显,f1.close()将从内存缓冲区更新磁盘中的文件。但有没有办法强制手动写入磁盘?

所以它可以如下工作

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

2 个答案:

答案 0 :(得分:4)

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

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

需要调用'seek',因为文件对象有一个用于读取和写入的“当前位置”,调用seek会将当前文件位置重置为文件的开头,以便可以读取你刚写的。

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

答案 1 :(得分:1)

使用f.flush()

可以刷新文件数据而无需关闭

现在我想要的管道行为可以按照以下方式实现

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

我的另外两个问题还是没有答案..

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

何时将更新后的文件写回磁盘?

我很快就会找到它......