os.walk递归访问文件夹非常慢

时间:2017-12-20 12:43:07

标签: python python-3.x subdirectory os.walk scandir

我的数据集有超过1000个文件夹,我使用os.walk递归访问每个文件夹中的每个图像。 os.walk适用于少量文件夹,但加载1000多个文件夹非常慢。我需要替代解决方案或任何可以解决此问题的方法 您可以看到类似的代码:

def run(dirname, img):
    data = img.load()
    width, height = img.size
    output_img = Image.new("RGB", (100, 100))
    Zero=np.zeros(shape=(100, 100), dtype=np.uint8)

    for (x, y) in labels:
        component = uf.find(labels[(x, y)])
        labels[(x, y)] = component
        path = 'D:/Python36/Fold/'
        if labels[(x, y)] == 0:
            Zero[y][x] = 255
            Zeroth = Image.fromarray(Zero)
            Zeroth.save(os.path.join(dirname, 'Zero.png'), 'png')


def main():
    path = "D:/Python36/Fold/"
    for root, dirs, files in os.walk(path):
        for file_ in files:
            img = Image.open(os.path.join(root, file_))
            img = img.point(lambda p: p > 190 and 255)
            img = img.convert('1')
            (labels, output_img) = run(root, img)


if __name__ == "__main__":
    main()

2 个答案:

答案 0 :(得分:2)

您的问题尚不清楚,但Python有etUom = (Spinner) findViewById(R.id.etUom); etUom.setAdapter(getDefaultAdapter()); ArrayAdapter<UomDetails> getDefaultAdapter() { List<UomDetails> result = new ArrayList<UomDetails>(); ArrayAdapter<UomDetails> adapter = new ArrayAdapter<UomDetails>( getApplicationContext(), android.R.layout.simple_spinner_item, result); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); return adapter; } 不会在每个文件上调用stat并且速度更快。 Related doc

旧Python版本的PyPI包(&lt; 3.5)https://pypi.python.org/pypi/scandir

答案 1 :(得分:1)

调试代码并按顺序执行文件您可以使用sorted(os.walk(path))并检查代码减慢的文件。
检查它可能 help how os.walk works