列出文件夹中的文件 - 不显示输出

时间:2017-06-15 04:00:31

标签: python-3.x

我正在尝试遍历扩展名为.jpg.jpeg的文件夹中的文件。看起来它应该可以工作,但由于某种原因什么都没有打印。当我运行它时,没有编译错误,它只是不打印任何东西到Python控制台。

import os

def find_images(image_dir, extensions=None):
    default_extensions = ('jpg', 'jpeg')
    if extensions is None:
        extensions = default_extensions
    elif isinstance(extensions, str):
        extensions = (extensions,)
    for root, dirs, filenames in os.walk(image_dir):
        for filename in filenames:
            print(filename, filename.split('.',1))
            if filename.split('.', 1)[-1].lower() in extensions:
                yield os.path.join(root, filename)


def main(image_dir=None):
    if image_dir is None:
        image_dir="D:/userName/Pictures/Gotham"
    find_images(image_dir)

main() #doesn't return anything in console
find_images("D:/userName/Pictures/Gotham", ) # also doesn't do anything...

我试图在网上找到的所有问题都提供了方法这样做(循环浏览目录中的文件),但没有任何东西显示我如何使用路径正确,因为我认为我做得不对。文件夹中有 个图片,我似乎无法理解为什么脚本没有列出每个文件的名称。

我也尝试image_dir=r'D:\userName\Pictures\Gotham'...='D://userName//Pictures//Gotham'无济于事。

编辑:意味着添加此内容。这个确实有效

file_path = "D:/userName/Pictures/"
def list_images():
    for root, dirs, files in os.walk(file_path):
        for file in files:
            if file.endswith(".jpg"):
                print(file, file.split('.',1))

list_images()

...所以我在上面find_images(...)忽略了什么?

(仅供参考 - 我正在尝试实施this answer

中的内容

1 个答案:

答案 0 :(得分:2)

我没有注意到你的函数中的偷偷摸摸的yield ......好吧,你已经创建了一个生成器函数,所以当你调用它时它只返回一个迭代器 - 让它实际开始执行你必须开始迭代它:

for image in find_images("D:/userName/Pictures/Gotham"):
    print(image)

或者至少得到第一个启动它的元素:

first_result = next(find_images("D:/userName/Pictures/Gotham"))

此外,虽然我在这里,这是检查扩展名的非常不安全的方法 - 如果文件名有多个点(即my.image.jpg),则无法识别。使用str.endswith()或从字符串后面切片而不是str.split()(或者不要将拆分限制为一个)。