我在Windows上运行Python中的数据分析应用程序。我希望用户能够将包含数据文件的文件夹复制到“in box”文件夹中,此时我的应用程序将开始处理数据。我的问题是Windows在目录副本完成时提供了一个事件
由于
答案 0 :(得分:0)
这可能是一种更好的方法,但你可以通过计算文件夹中的文件数量来开始,然后等到这个数量增加,比如这样:
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'无论你需要什么文件扩展名。当然,这并不是说有问题的文件实际上是那种格式/类型,只是它有扩展名。
这是我在这个网站上的第一个答案,希望它有所帮助! :)
答案 1 :(得分:0)
我知道这是一个迟到的回复,但只是想提供更多的想法。
TheCatOfWar给出的答案有一个缺点:解决方案假定文件或文件目录可以在一秒内完全复制,但对于大文件来说并非总是如此或目录。
我在Windows 7上测试了他/她的代码,目录中包含许多文件,总共高达3 GB。在我开始复制这个大目录后,脚本停止了一小段时间,因为在"收件箱中创建了一个目录"但是所包含的文件仍在被复制。
无论你在那里睡多少秒,当while循环中断时,保证你有一个完全复制的目录是不安全的。
我认为thebjorn给出的评论是更好的,更重要的是更安全的方式:如果您可以控制复制启动器,请使用标记文件来指示副本的结尾这也是我现在正在尝试的解决方案。