我正在编写一个 Python 记录器脚本,它以下列方式写入 CSV 文件:
- 打开文件
- 追加数据
- 关闭文件(我认为这是保存更改所必需的,以确保每次日志记录后的安全。)
问题:
该文件可以通过 Windows 资源管理器访问(我使用的是 XP)。如果文件在 Excel 中打开,则 Excel 会锁定对它的访问。当脚本尝试追加数据时,显然它失败了,然后它完全中止。
目标:
有没有办法使用 Python 锁定文件,以便对它的任何访问仍然是脚本独有的?或者我的方法一开始就很差?
我正在编写一个 Python 记录器脚本,它以下列方式写入 CSV 文件:
问题:
该文件可以通过 Windows 资源管理器访问(我使用的是 XP)。如果文件在 Excel 中打开,则 Excel 会锁定对它的访问。当脚本尝试追加数据时,显然它失败了,然后它完全中止。
目标:
有没有办法使用 Python 锁定文件,以便对它的任何访问仍然是脚本独有的?或者我的方法一开始就很差?
无需在每次访问后关闭并重新打开文件,只需刷新其缓冲区:
theloggingfile.flush()
这样,您就可以保持打开它以在 Python 中写入,这应该会锁定该文件以防止其他打开它进行写入的程序。我认为Excel 在 Python 中打开时将能够以只读方式打开它,但如果不重新启动到 Windows,我无法检查它。
编辑:我认为您不需要以下步骤。.flush()
应该将它发送到操作系统,如果您尝试在另一个程序中查看它,操作系统应该给它缓存版本。用于os.fsync
强制操作系统将其真正写入硬盘驱动器,例如,如果您担心突然断电。
os.fsync(theloggingfile.fileno())
据我所知,Windows 不支持文件锁定。换句话说,无法阻止不知道您的文件被锁定的应用程序读取文件。
但剩下的问题是:Excel 如何做到这一点?
您可能想先尝试写入临时文件(Excel 不知道的文件),然后再用它替换原始文件。