如何在Python中确定文件是否已经下载完成

4

我有一个名为raw_files的文件夹。来自多个来源的非常大的文件(~100GB文件)将上传到此文件夹。

我需要获取已完成上传到文件夹的视频的文件信息。最好的方法是确定文件当前是否正在下载到文件夹中(传递),还是视频已经下载完成(运行脚本)?谢谢。


你的上传软件应该通知(或运行)你的脚本。没有平台无关的方法来判断一个文件是否“完成”。 - Fred Foo
我认为你的问题已经在这个stackoverflow帖子中得到了回答。 - Alex
2个回答

2
最可靠的方法是修改上传软件(如果可以的话)。
一个典型的方案是先将每个文件上传到同一文件系统上的临时目录中,当上传完成后再移动到最终位置。这样的“移动”操作是廉价而且原子性。
这个主题的变化是将每个文件上传到一个临时名称下(例如 file.dat.incomplete 而不是file.dat),然后进行重命名。你的脚本只需要跳过名为*.incomplete的文件即可。

请注意,在Windows上移动文件不是原子操作。 - Sven Marnach
@Sven Marnach:感谢您的评论。我很想听听在Windows上,当文件移动在同一文件系统内时,实际的现实场景何时不是原子操作。此外,还有MoveFileTransacted - NPE
请参见https://dev59.com/I3VC5IYBdhLWcg3w1E_w。但我认为在这种情况下,这不会引入任何竞争条件。 - Sven Marnach
@aix:感谢您的回复。我这里有一个限制,那就是我不是上传文件的人。这些文件来自多个来源。我唯一能控制的是他们上传到的文件夹。这会如何改变情况? - David542

0
如果您检查这些文件,请将文件大小存储在某个地方。当您进入下一轮并且文件大小仍然相同时,您可以基本上将它们视为已完成(取决于第一次和第二次检查之间的时间)。时间间隔可以设置为上传服务(FTP等)的超时间隔。
没有特殊的标志或内容显示文件已完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接