防止文件被打开

1 投票
2 回答
3035 浏览
提问于 2025-04-16 08:27

我正在写一个Python的日志记录脚本,它会以以下方式将数据写入CSV文件:

  1. 打开文件
  2. 追加数据
  3. 关闭文件(我觉得这是必要的,为了确保每次记录后都能保存更改。)

问题:
这个文件在Windows资源管理器中非常容易访问(我用的是XP)。如果文件在Excel中打开,Excel就会锁定对它的访问。当脚本尝试追加数据时,显然会失败,然后整个过程就会中止。

目标:
有没有办法用Python锁定一个文件,这样任何对它的访问都只能由脚本来进行?或者说我一开始的方法就有问题?

2 个回答

0

据我所知,Windows系统并不支持文件锁定。换句话说,如果某个应用程序不知道你的文件被锁定,它还是可以读取这个文件。

但接下来要问的是:那Excel是怎么做到这一点的呢?

你可以先尝试写入一个临时文件(也就是Excel不知道的那个文件),然后再用这个临时文件替换掉原来的文件。

4

与其每次访问文件后都关闭再重新打开,不如直接刷新它的缓冲区:

theloggingfile.flush()

这样,你就可以在Python中保持文件处于打开状态,这样可以防止其他程序同时打开它进行写入。我觉得Excel在Python中打开这个文件时可以以只读方式打开,但我不能确认这一点,因为我需要重启到Windows系统才能检查。

补充:我觉得下面的步骤其实不需要。.flush()应该会把数据发送给操作系统,如果你在其他程序中查看这个文件,操作系统应该会给你一个缓存的版本。如果你担心突然断电,可以使用os.fsync来强制操作系统把数据真正写入硬盘。

os.fsync(theloggingfile.fileno())

撰写回答