我正在编写一个Python Logger脚本,该脚本以以下方式写入CSV文件:

  1. 打开文件
  2. 附加数据
  3. 关闭文件(我认为这是保存更改的必要条件,以便在每次登录例程之后要安全。)

问题:
通过Windows Explorer(我正在使用XP),该文件非常可以访问。如果该文件是在Excel中打开的,则将访问该文件由Excel锁定。当脚本试图附加数据时,显然会失败,然后完全中止。

客观的:
有没有一种方法可以使用Python锁定文件,以便对脚本的任何访问仍然是独有的?也许我的方法首先很差?

有帮助吗?

解决方案

只需冲洗其缓冲区,而不是关闭和重新打开文件:

theloggingfile.flush()

这样,您可以在Python中保持开放式写作,该文件应锁定其他程序以供书写的程序。我 思考 Excel在Python打开时只能将其作为仅阅读的打开,但是如果不重新启动Windows,我无法检查一下。

编辑: 我认为您不需要以下步骤。 .flush() 应该将其发送到操作系统,如果您尝试在另一个程序中查看它,则操作系统应给予缓存版本。利用 os.fsync 迫使操作系统真正将其写入硬盘驱动器,例如,如果您担心突然的功率故障。

os.fsync(theloggingfile.fileno())

其他提示

据我所知,Windows不支持文件锁定。换句话说,无法阻止读取文件的应用程序。

但是剩下的问题是:Excel如何实现这一目标?

您可能需要尝试首先写入临时文件(Excel不知道的文件),然后由IT室内替换原始文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top