【问题标题】:How to Passively Read Text File [Python]如何被动读取文本文件 [Python]
【发布时间】:2013-09-02 10:52:01
【问题描述】:

当然,我了解如何在 Python 中读写文本文件。但是,我需要能够在没有 Windows 的情况下读取文件,因为它在另一个进程中“打开”。这是交易:

我在我的 Raspberry Pi 上运行了一个 Python 脚本,它通过网络从我笔记本电脑上的文本文档中提取一个 3 位数字。我希望能够随时更改此文本文档并将其保存,以便 Python 脚本几乎立即更新。这就是我现在所拥有的。

while True:
    text = open("/mnt/win/text.txt","r")
    rgb = text.read()
    text.close()

    ## ... Do stuff with rgb

    time.sleep(.2)

这很好用,因为我基本上有一个(略多于)0.2 秒的循环,其中文件“text.txt”只打开了一小部分。但是,每当我通过记事本修改“text.txt”时,点击保存可能会给我一个错误,提示该文件已在另一个进程中打开。所以这让我想知道;有办法解决吗?我见过类似的事情,有人使用 PHP 脚本读取文件并将其转储到他们的 Python 代码中,但我有点希望将其全部保留为 Python。谢谢!

编辑:顺便说一句,如果不是很明显,Windows 上包含文本文件的文件夹已安装到 Linux 上的 /mnt/win。

【问题讨论】:

  • 如何将文本文件的当前“版本”复制到临时空间,处理临时文件,然后重新计算校验和以确保文件没有更改?
  • 在复制过程中的任何时候,该文件是否会被脚本“使用”?因为如果不是,那是一个非常简单的修复。
  • 我应该指定copy,我的意思是你应该使用osshutil 之类的东西。看看this
  • 如果您正处于text.read() 的中间并且记事本写入文件,您希望发生什么? (您可能已经猜到了,Windows 默认强制文件锁定的全部意义在于让您不必考虑和回答这个问题……)
  • @inspectorG4dget:你将如何在不打开文件并读入的情况下重新计算校验和?

标签: python text io


【解决方案1】:

不知道为什么我完全没有想到它,但我最终只是制作了一个名为 temp.xml 的文件的副本。这不是最干净的方法,但效果很好。

我只是在循环期间将shutil.copyfile("/mnt/win/text.txt","/mnt/win/temp.txt") 放在text = open(...) 之前,因此原始文本文件似乎大部分未被程序触及。

这么简单的解决方案,我觉得问起来有点可笑

【讨论】:

  • 那么shutil.copyfile 使用了什么魔法来阻止it 声明文件锁定?不管是什么,也许你可以在你原来的程序中做同样的事情。
  • 我不确定。老实说,它可能仍然会锁定文件。但是在多次使用中,我没有遇到任何问题。我的猜测是,这是一个如此短的锁,没关系。不过我还得做更多的研究
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多