写入文件,然后在Python 3.6.2上读取
当运行以下python脚本(test.txt是一个空文件)时,它会打印一个空字符串 但是,当重新打开文件时,它可以很好地读取它:写入文件,然后在Python 3.6.2上读取,python,file,Python,File,当运行以下python脚本(test.txt是一个空文件)时,它会打印一个空字符串 但是,当重新打开文件时,它可以很好地读取它: target=open("test.txt",'w+') target.write('ffff') print(target.read()) 这会根据需要打印“ffff” 为什么会这样?即使我在第2行中对“target”进行了更新,并且我必须将test.txt重新分配给它,但它是否仍然被识别为没有内容?在读取文件之前,您必须关闭()。不能同时读取和写入文件。这会导致
target=open("test.txt",'w+')
target.write('ffff')
print(target.read())
这会根据需要打印“ffff”
为什么会这样?即使我在第2行中对“target”进行了更新,并且我必须将test.txt重新分配给它,但它是否仍然被识别为没有内容?在读取文件之前,您必须
关闭()。不能同时读取和写入文件。这会导致不一致。无需关闭并重新打开它。在读取文件之前,只需返回文件的起点:
target=open("test.txt",'w+')
target.write('ffff')
target=open("test.txt",'r')
print(target.read())
文件具有读/写位置。写入文件将该位置置于写入文本的末尾;阅读从同一位置开始
用以下方法将该位置放回起始位置:
演示:
这些数字是target.write()
和target.seek()的返回值;它们是写入的字符数和新位置。尝试刷新,然后查找文件的开头:
>>> with open("test.txt",'w+') as target:
... target.write('ffff')
... target.seek(0) # to the start again
... print(target.read())
...
4
0
ffff
您忘记了关闭文件。这会将数据刷新到文件中。否则您必须倒带文件。取决于你想要实现什么。@Jean-Françoisfar:法拉盛与此有什么关系?它是相同的文件对象,相同的文件句柄,相同的进程。如果需要,读取将在缓冲区中找到数据。@MartijnPieters在第二条注释中更正。但不清楚OP想做什么。关闭并读取或回放并读取。@Jean-Françoisfab:他们希望能够读取写入文件的数据,而不必重新打开。这是一种专利废话。文件I/O层也知道如何从缓冲区读取。您所需要做的就是了解文件的位置。不需要刷新。这是相同的过程,相同的文件句柄。
with open("test.txt",'w+') as target:
target.write('ffff')
target.seek(0) # to the start again
print(target.read())
>>> with open("test.txt",'w+') as target:
... target.write('ffff')
... target.seek(0) # to the start again
... print(target.read())
...
4
0
ffff
f = open(path, 'w+')
f.write('foo')
f.write('bar')
f.flush()
f.seek(0)
print(f.read())