python - 我可以在不重新打开文件的情况下从打开的文件中读取新数据吗?

标签 python macos file-io

考虑有一个包含一些随机文本的文件 test.txt

现在我们运行以下代码:

f = open('test.txt', 'r')
f.read()

现在我们将来自其他进程的数据附加到 test.txt 上。有没有什么方法可以在不重新打开 f 的情况下让我们读取 新数据?

这个问题仅限于 Python,它只是理解要点所需的少量代码。

编辑:我已经尝试了我所知道的一切(冲洗、阅读、寻找等),但似乎没有任何更新。

编辑:由于行为似乎因文件“附加到”的方式而异,因此我将提供更具体的设置。我在 OS X 10.9 上,我正在尝试读取由 syslogd 写入的 /var/log/system.log

编辑:看来我错了。使用 read 将提取新数据,但如果数据很小,则必须先使用 flush 才能读取它。

最佳答案

如果您再次从 f 读取,您将获得更多数据。

f = open('my_file')
print(f.read())
# in bash: echo 'more data' >> my_file
print(f.read())

f 基本上是一个带有位置的文件句柄,再次读取它只会继续从当前位置读取。

这也可能受到修改文件的内容的影响。许多文本编辑器会先保存到一个单独的文件,然后再复制到原来的文件中。如果发生这种情况,您将看不到新文件中的更改。您可以继续使用现有文件,但只要您关闭它,操作系统就会完成删除。

关于python - 我可以在不重新打开文件的情况下从打开的文件中读取新数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413115/

相关文章:

python - 在python中删除句子末尾的句号

c - 简单文件处理C程序出错

python - Pandas - 仅重命名第一个字典匹配项而不是最后一个匹配项

python - 使用 pygobject 编写 D-Bus 服务?

Python:如何使用 xlsxwriter 更改单元格编号类型

java - 打开 MPI 的 Java 绑定(bind)

java - 配置为监听端口 80 的 Tomcat 连接器启动失败

macos - 多配置 USB 设备 - Catalina 中的问题

ruby - 在 Ruby 中将二进制文件读取为字符串

java - java中ArrayList的for循环