在使用 python 移动文件之前,如何检查文件是否已完全复制到文件夹中
How can I check a file has been copied fully to a folder before moving it using python
我目前正在从事一个将图像添加到文件夹的项目。在添加它们时,还需要将它们(以四个为一组)移动到辅助文件夹,以覆盖那里已有的图像(如果有)。我使用 watchdog.py 来监控第一个文件夹。当 'on_created' 事件触发时,我获取新添加图像的文件路径并使用 shutil.copy() 将其复制到第二个文件夹,递增计数器并使用计数器值在图像复制时重命名图像(所以它变成 folder/1.jpg)。当计数器达到 4 时,它会重置为 0,并且最近的 4 张图像会显示在网页上。所有这些文件夹都在同一驱动器上的本地文件系统中。
我的问题是有时似乎事件在图像完全保存到第一个文件夹之前触发(图像大约 1Mb 但略有不同,所以我无法检查文件大小)导致部分或损坏图像被复制到第二个文件夹。在最坏的情况下,它会抛出一个 IOError,说文件甚至不存在。
任何建议。我正在使用 OSX 10.11、Python 2.7。图片都是Jpeg格式。
我看到了多种解决方案:
- 当您第一次在第一个文件夹中创建图像时,为它们的名称添加一个后缀,例如
filexxx.jpg.part
,当它们完全写入后,只需重命名它们,删除 .part
。
然后在你的看门狗中,确保不要处理以 .part
结尾的文件
- 在你的看门狗中,测试图像文件,比如尝试用图像库加载文件,并捕获异常。
我目前正在从事一个将图像添加到文件夹的项目。在添加它们时,还需要将它们(以四个为一组)移动到辅助文件夹,以覆盖那里已有的图像(如果有)。我使用 watchdog.py 来监控第一个文件夹。当 'on_created' 事件触发时,我获取新添加图像的文件路径并使用 shutil.copy() 将其复制到第二个文件夹,递增计数器并使用计数器值在图像复制时重命名图像(所以它变成 folder/1.jpg)。当计数器达到 4 时,它会重置为 0,并且最近的 4 张图像会显示在网页上。所有这些文件夹都在同一驱动器上的本地文件系统中。
我的问题是有时似乎事件在图像完全保存到第一个文件夹之前触发(图像大约 1Mb 但略有不同,所以我无法检查文件大小)导致部分或损坏图像被复制到第二个文件夹。在最坏的情况下,它会抛出一个 IOError,说文件甚至不存在。
任何建议。我正在使用 OSX 10.11、Python 2.7。图片都是Jpeg格式。
我看到了多种解决方案:
- 当您第一次在第一个文件夹中创建图像时,为它们的名称添加一个后缀,例如
filexxx.jpg.part
,当它们完全写入后,只需重命名它们,删除.part
。 然后在你的看门狗中,确保不要处理以.part
结尾的文件
- 在你的看门狗中,测试图像文件,比如尝试用图像库加载文件,并捕获异常。