Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
写入文件,然后在Python 3.6.2上读取_Python_File - Fatal编程技术网

写入文件,然后在Python 3.6.2上读取

写入文件,然后在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重新分配给它,但它是否仍然被识别为没有内容?在读取文件之前,您必须关闭()。不能同时读取和写入文件。这会导致

当运行以下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')
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())