我正在编写一个Python记录器脚本,它以下列方式写入CSV文件:
问题:
通过Windows资源管理器可以访问该文件(我正在使用XP)。如果在Excel中打开文件,Excel将锁定对它的访问。当脚本试图附加数据时,显然它会失败,然后它会完全中止。
目的:
有没有办法使用Python锁定文件,以便对脚本的任何访问都是独占的?或者我的方法论可能首先是穷人?
答案 0 :(得分:4)
不是在每次访问后关闭并重新打开文件,只需刷新其缓冲区:
theloggingfile.flush()
通过这种方式,您可以将其保持打开以便在Python中编写,这应该将文件锁定在打开它以供写入的其他程序中。我认为 Excel可以在Python中打开时以只读方式打开它,但如果不重新启动进入Windows,我就无法检查它。
编辑:我认为您不需要以下步骤。 .flush()
应将其发送到操作系统,如果您尝试在另一个程序中查看它,操作系统应该为其提供缓存版本。使用os.fsync
强制操作系统将其真正写入硬盘驱动器,例如如果你担心突然的电力故障。
os.fsync(theloggingfile.fileno())
答案 1 :(得分:0)
据我所知,Windows不支持文件锁定。换句话说,无法阻止不知道您的文件被锁定的应用程序读取文件。
但剩下的问题是:Excel如何实现这一目标?
您可能想先尝试写一个临时文件(Excel不知道的文件),然后用它替换原始文件。