使用os.walk限制文件路径的数量,目录

时间:2017-02-23 02:06:58

标签: python queue filepath os.walk

我有一个申请。一种允许目录路径并使用os.walk

返回给定目录下的文件路径列表的方法

我想在一个目录中读取某些文件(某些阈值,如带来20个文件路径),这个目录中有大量没有文件和存储在Queue中。在这里,我可以检查文件路径及其在数据库中的状态。

下次当我使用相同的目录调用相同的方法时,它应该通过排除已经返回的文件路径来返回下一组文件路径。

方案: 让我们假设,D:/ Sample_folder有1000个文件。

my_dir =“D:/ Sample_folder”

def read_files(目录):     file_paths = []

for root, directories, files in os.walk(directory):
    for filename in files:
        file_path = os.path.join(root, filename)
        file_paths.append(file_path)

return file_paths 

read_files(my_dir)==这将在第一轮中给出前100个文件                     接下来,它应该给出剩余的100个文件                     像这样...

任何想法或示例脚本。

2 个答案:

答案 0 :(得分:0)

假设您已填充files,则应该这样做。

import Queue

paths = Queue.Queue()

current_list = []

for i, path in enumerate(files):

    # Second case to make sure we dont add a blank list
    if i % 100 == 0 and i != 0:
        paths.put(current_list)
        current_list = []

    current_list.append(path)

答案 1 :(得分:0)

编辑:

这是一个使用类的可能解决方案,但它不会添加很多代码。主要思想是每次访问元素时弹出一个元素。因此工作流程是创建一个FileListIter对象,然后在其上调用.next()以返回下一个100文件的列表以执行某些操作,然后对象会忘记它们。您可以致电.has_next()查看您是否已退出文件。如果您将参数传递给下一个.next(2),那么它将返回列表中的前两个文件。

CODE:

import os

class FileListIter(object):
    #Initialize the files
    def __init__(self,directory):
        file_paths = []
        for root, directories, files in os.walk(directory):
            for filename in files:
                file_path = os.path.join(root, filename)
                file_paths.append(file_path)

        self.files = file_paths

    #When called w/out args give back the first 100 files, otherwise the first n
    def next(self,n=100):
        ret,self.files = self.files[:n],self.files[n:]
        return ret

    #Check if there are any files left
    def has_next(self):
        return len(self.files) > 0

d = '/home/rob/stack_overflow'
files_gen = FileListIter(d) #<-- this makes an object

while files_gen.has_next():
    file_subset = files_gen.next(2)
    print file_subset