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
答案 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()函数是否尝试直接从磁盘或文件的已有缓冲区缓存中读取?
何时将更新后的文件写回磁盘?
我很快就会找到它......