将os.walk限制为一定数量的文件

时间:2014-06-09 21:12:10

标签: python

我想索引150个文件,以便os.walk仅在浏览150个文件后终止。

例如:
假设要编入索引的第一个文件夹有20个文件,第二个30,第4个,第10个,第120个,第6个22个,'walk'应该聚合所有文件夹中的总数,因为它经过每个文件夹直到总和达到150,然后终止。

这不起作用:

import os
from os.path import join, getsize

i = 0
while i <= 150:
    print(i)
    for root, dirs, files in os.walk('D:/'):
        i += 1
        for f in files:
            print(f, 'ROOT: ', root, 'DIR: ', dirs)

请帮忙。谢谢大家。

2 个答案:

答案 0 :(得分:3)

您需要测试文件编号 os.walk()循环:

i = 150
for root, dirs, files in os.walk('D:/'):
    if i <= 0:
        break

    for f in files[:i]:
        i -= 1
        print(f, 'ROOT: ', root, 'DIR: ', dirs)

我使用了files的切片来简化测试,因为break只会结束最内部的活动循环。通过倒计时,切片操作有点简化。

过度切片files完全合法;如果只有20个项目切片到150返回只有20项可用。在此期间,i减少了20,因此下一个文件夹最多可以处理130个文件等。

答案 1 :(得分:2)

i = 0
j=0
for root, dirs, files in os.walk('D:/'):
        i += 1 
        if i > 150: #this is 150 folders (not files)
           break
        for f in files:
            j+= 1
            if j > 150:  #this is 150 files
               i=151 # force exit the outer loop
               break
            print(f, 'ROOT: ', root, 'DIR: ', dirs)