我正在尝试遍历扩展名为.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)
中的内容答案 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()
(或者不要将拆分限制为一个)。