迭代python中不断增长的文件夹中的文件

时间:2015-11-02 04:28:10

标签: python file python-2.7 directory

我想迭代python中文件夹中的所有文件。

此外,假设文件夹正在增长,即文件被异步添加到文件夹中。每当我迭代时,我都在做一些操作。

所以假设该操作所花费的时间不仅仅是下载速度,这意味着在下载结束之前我不会完成迭代。

如果有任何办法,请建议。你可以随时重新开始,所以请不要建议这种方法。

目前我正在做这样的事情:

onlyfiles = [ f for f in listdir(".") if isfile(join(".",f)) ]

for s in onlyfiles:
    #dosomething

1 个答案:

答案 0 :(得分:0)

我会使用python set来构建您已经处理过的文件列表,然后在目录中循环多次,直到您感觉自己已经看到所有当前批量文件为止。

类似的东西:

 #!/usr/bin/env python

 import os
 import time

 processed = set()
 tripsWithNoChange = 0
 timeToLetWriterCatchUp = 2
 maxNumberOfTrips = 10

 while tripsWithNoChange < maxNumberOfTrips:
     for root,dirs,files in os.walk('.'):
         candidates = set(files)

         # remove the files already visited from consideration
         candidates.difference_update(processed)

         if len(candidates) == 0:
             tripsWithNoChange += 1
             continue

         for f in candidates:
             # process file
             pass

         processed.update(candidates)

         time.sleep(timeToLetWriterCatchUp)

此方法中有几个magic个数字,您需要调整,直到您确信所有文件都已处理完毕,具体为:

  • tripsWithNoChange
  • timeToLetWriterCatchUp
  • maxNumberOfTrips

也许这会给你一些想法。