python - 取件目录 : How not to pickup files that are still being written?

标签 python file-io batch-processing

我有一个 Python 脚本,它检查拾取目录并处理它找到的任何文件,然后删除它们。

我如何确保不拾取仍在由将文件放入该目录的进程写入的文件?

我的测试用例非常简单。我将 300MB 的文件复制粘贴到 pickup 目录中,脚本经常会抓取一个仍在写入的文件。它仅对部分文件进行操作,然后将其删除。这会在操作系统中引发文件操作错误,因为它正在写入的文件消失了。

  • 在打开/处理/删除文件之前,我已经尝试获取对文件的锁定(使用 FileLock 模块)。但这并没有帮助。

  • 我考虑过检查文件的修改时间以避免在现在的 X 秒内发生任何事情。但这看起来很笨重。

我的测试是在 OSX 上进行的,但我正试图找到一个可以跨主要平台运行的解决方案。

我在这里看到一个类似的问题(How to check if a file is still being written?),但没有明确的解决方案。

谢谢

最佳答案

作为解决方法,您可以监听文件修改事件(watchdog 是跨平台的)。修改后的事件(至少在 OS X 上)不会在每次写入时触发,它只会在关闭时触发。因此,当您检测到修改事件时,您可以假设所有写入都已完成。

当然,如果文件以 block 的形式写入,并且在每个 block 之后保存,这将不起作用。

关于python - 取件目录 : How not to pickup files that are still being written?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591598/

相关文章:

python - 将书籍作者分类为小说与非小说

python - 如何在不使用 `plot3d_parametric_line` 的情况下绘制参数曲线

python - IPython 更改整个 session 的输入单元格语法突出显示逻辑

ios - 使用 AFNetworking 2 高效下载大量图像(1500+)

python - 序列中的第 N 个 1

file-io - 在 Lua 中逐行读取文件

c++ - 无法执行 fstream >> int * 吗?

python - 将使用 JSON 数组创建的文件合并到单个文件中

batch-file - 如何创建适用于程序文件和程序文件(x86)的批处理文件?

performance - 批处理大量文件-是存储在内存中还是先写入磁盘?