知道何时完成目录复制

我有一个运行在Windows上的Python数据分析应用程序。 我希望用户能够将包含数据文件的文件夹复制到“收件箱”文件夹中,此时我的应用程序将开始处理数据。 我的问题是Windows在目录拷贝完成时提供了一个事件

谢谢

也许有更好的方法来做到这一点,但你可以通过计算文件夹中的文件数量开始,然后等待,直到这个数量有所增加,如下所示:

 import glob, os, time directory = os.path.join('inbox','*') #Uses wildcard so ANY files in the 'inbox' directory are used. numFiles = len(glob.glob(directory)) #Gets initial number of files while True: numFilesNew = len(glob.glob(directory)) #Gets current number of files if numFilesNew > numFiles: #Compare current amount of files to initial break #Exit loop if there's an increase else: time.sleep(1) #Wait if no files were added files = glob.glob(directory) #Make a list of filenames in the directory print(files) 

对于那些不确定的,glob.glob本质上返回给定目录中的文件列表。

这段代码是用Python 3.4编写的,但是我没有看到它在其他版本中不起作用的原因。

如果你只想要某个扩展名的文件,那么你可以换掉

 directory = os.path.join('inbox','*') 

对于

 directory = os.path.join('inbox','*.png') 

但是,当然你可以改变'.png'作为你需要的文件扩展名。 当然,这并不是说所涉及的文件实际上是该格式/类型,只是它具有扩展名。

这是我在这个网站上的第一个答案,希望它有帮助! 🙂

我知道这是一个迟到的答复,但只是想提供更多的想法。

TheCatOfWar给出的答案有一个缺点: 该解决方案假定一个文件或一个文件目录可以在一秒钟内完全复制,而当涉及到大型文件或目录时,情况并非总是如此。

我在Windows 7上测试了他/她的代码,其目录包含多达3 GB的文件。 在我开始复制这个大目录之后,脚本停了片刻,因为在“收件箱”中创建了一个目录,但所包含的文件仍然被复制。

不管你睡多少秒,在while循环中断的时候保证你有一个完全复制的目录是不安全的。

我认为bjorn给出的评论是更好,更重要的是更安全的方法: 如果你有控制复制发起方的一面,使用一个标志文件来表示副本的结束。 这也是我现在正在尝试的解决方案。