如果文件在打开时被编辑会怎样?
What happens if a file is edited while open?
如果我有一个文件 test.txt
,我会这样打开它:
import time
with open("test.txt", "r") as f:
time.sleep(30)
print(f.readlines())
我在 Python 打开文件和读取行之间使用文本编辑器编辑文件,我应该期待什么?
我应该看到打开文件之前的行,还是编辑文件的新行,还是不确定我会看到什么?
(我即将 运行 自己进行这些测试,但我想我会在这里问一下,以防人们有更多信息,这样我也可以分享我的结果。)
编辑:
通过一些有用的评论和测试,我认为我对正在发生的事情有相当不错的理解,但更深入的理解将不胜感激。例如,我可以在 while readlines
is 运行ning 末尾编辑一个非常大的文件并让它选择上的变化?还是文件被锁定在每个单独的函数中?
看起来文件是从文件对象的当前位置读取的。
当您使用 with open("read_file_test.txt", "r") as f:
打开文件时,Python 将准备好读取文件,并将文件对象的当前位置放在索引 0 处。
实际读取文件时,Python 将从该文件位置读取文件的最新 版本。
我为支持这一点而进行的测试如下:
我运行
import time
with open("read_file_test.txt", "r") as f:
# gives me a countdown timer
for i in range(10):
print(i)
time.sleep(1)
print(f.readlines())
并在第 9 秒处保存了新编辑的文件。屏幕上打印的是文件的新编辑文本。
然后,根据@Kraigolas 的建议,我 运行:
import time
with open("read_file_test.txt", "r") as f:
bar = f.read()
print(bar)
for i in range(10):
print(i)
time.sleep(1)
print(f.readlines())
启动时,它会打印文件的原始内容。然后我在倒计时期间向文件添加了一个新行。倒计时结束后,它只打印出 添加的新行 ,没有其他内容。
这让我相信文件对象将存储它在文件中所在位置的字符位置,并且总是从文件的最新版本中的那个位置读取。
但是,如果有人知道更多细节或找到反驳这一点的证据,我很乐意听听!
如果我有一个文件 test.txt
,我会这样打开它:
import time
with open("test.txt", "r") as f:
time.sleep(30)
print(f.readlines())
我在 Python 打开文件和读取行之间使用文本编辑器编辑文件,我应该期待什么?
我应该看到打开文件之前的行,还是编辑文件的新行,还是不确定我会看到什么?
(我即将 运行 自己进行这些测试,但我想我会在这里问一下,以防人们有更多信息,这样我也可以分享我的结果。)
编辑:
通过一些有用的评论和测试,我认为我对正在发生的事情有相当不错的理解,但更深入的理解将不胜感激。例如,我可以在 while readlines
is 运行ning 末尾编辑一个非常大的文件并让它选择上的变化?还是文件被锁定在每个单独的函数中?
看起来文件是从文件对象的当前位置读取的。
当您使用 with open("read_file_test.txt", "r") as f:
打开文件时,Python 将准备好读取文件,并将文件对象的当前位置放在索引 0 处。
实际读取文件时,Python 将从该文件位置读取文件的最新 版本。
我为支持这一点而进行的测试如下:
我运行
import time
with open("read_file_test.txt", "r") as f:
# gives me a countdown timer
for i in range(10):
print(i)
time.sleep(1)
print(f.readlines())
并在第 9 秒处保存了新编辑的文件。屏幕上打印的是文件的新编辑文本。
然后,根据@Kraigolas 的建议,我 运行:
import time
with open("read_file_test.txt", "r") as f:
bar = f.read()
print(bar)
for i in range(10):
print(i)
time.sleep(1)
print(f.readlines())
启动时,它会打印文件的原始内容。然后我在倒计时期间向文件添加了一个新行。倒计时结束后,它只打印出 添加的新行 ,没有其他内容。
这让我相信文件对象将存储它在文件中所在位置的字符位置,并且总是从文件的最新版本中的那个位置读取。
但是,如果有人知道更多细节或找到反驳这一点的证据,我很乐意听听!