题
我正在编写一个Python Logger脚本,该脚本以以下方式写入CSV文件:
- 打开文件
- 附加数据
- 关闭文件(我认为这是保存更改的必要条件,以便在每次登录例程之后要安全。)
问题:
通过Windows Explorer(我正在使用XP),该文件非常可以访问。如果该文件是在Excel中打开的,则将访问该文件由Excel锁定。当脚本试图附加数据时,显然会失败,然后完全中止。
客观的:
有没有一种方法可以使用Python锁定文件,以便对脚本的任何访问仍然是独有的?也许我的方法首先很差?
解决方案
只需冲洗其缓冲区,而不是关闭和重新打开文件:
theloggingfile.flush()
这样,您可以在Python中保持开放式写作,该文件应锁定其他程序以供书写的程序。我 思考 Excel在Python打开时只能将其作为仅阅读的打开,但是如果不重新启动Windows,我无法检查一下。
编辑: 我认为您不需要以下步骤。 .flush()
应该将其发送到操作系统,如果您尝试在另一个程序中查看它,则操作系统应给予缓存版本。利用 os.fsync
迫使操作系统真正将其写入硬盘驱动器,例如,如果您担心突然的功率故障。
os.fsync(theloggingfile.fileno())
其他提示
据我所知,Windows不支持文件锁定。换句话说,无法阻止读取文件的应用程序。
但是剩下的问题是:Excel如何实现这一目标?
您可能需要尝试首先写入临时文件(Excel不知道的文件),然后由IT室内替换原始文件。
不隶属于 StackOverflow