Python全局多扩展

Python全局多扩展,python,Python,嗨,我需要创建包含以下格式的图像路径的文件 /var/sample/55/cam.png;55 /var/sample/55/desktop.png;55 /var/sample/44/92x92.png;44 /var/sample/44/full.png;44 我正在使用以下python脚本来完成此操作 BASE_PATH=sys.argv[1] SEPARATOR=";" f = open('path.csv', 'w') for dirname, dirnames, filename

嗨,我需要创建包含以下格式的图像路径的文件

/var/sample/55/cam.png;55
/var/sample/55/desktop.png;55
/var/sample/44/92x92.png;44
/var/sample/44/full.png;44
我正在使用以下python脚本来完成此操作

BASE_PATH=sys.argv[1]
SEPARATOR=";"
f = open('path.csv', 'w')

for dirname, dirnames, filenames in os.walk(BASE_PATH):
    for subdirname in dirnames:
        subject_path = os.path.join(dirname, subdirname)
    list = glob.glob(subject_path+'/*.png')
        for filename in list:
            abs_path = "%s" % (filename)
            print "%s%s%s" % (abs_path, SEPARATOR, subdirname)
    print >>f, "%s%s%s" % (abs_path, SEPARATOR, subdirname)
f.close()
但是上面的代码现在只列出了
.png
扩展名,我需要包括
.jpg、.jpeg
等等。。如何编辑上述代码以实现它

我已经找到了答案,但无法理解如何在这里应用

谢谢,

Haris

您需要做的是为每个扩展设置glob。glob.glob()返回一个列表,然后可以将其附加到其余列表中

例如,你可以这样做:

extensions = ("*.png","*.jpg","*.jpeg",)
list = []
for extension in extensions:
    list.extend(glob.glob(subject_path+"/"+extension)
或更简洁地使用列表理解:

list = sum([ glob.glob(subject_path+"/"+x) for x in ("*.png","*.jpg","*.jpeg") ], [])
因此glob.glob()返回使用该扩展名进行全局处理的所有文件的列表。使用list.extend()可以将一个列表附加到另一个列表,因此您只需将所有这些glob结果一起添加到一个列表中。

glob使用后端的模块,也许您可以自己直接使用它?下面是一种在函数中签出的方法,以保持代码体更干净:

例如


我在问题中已经提到,我发现了那个链接,唯一的困惑是如何在我的案例中应用它。仅仅是复制粘贴。看我的答案,那真的只是复制粘贴。
import sys
import fnmatch
import os


def filter_files(file_list, ext_list):
    for file in file_list:
        for ext in ext_list:
            if fnmatch.fnmatch(file, ext):
                yield file
                break

BASE_PATH=sys.argv[1]

EXTENSIONS= "*.jpg", "*.png", "*.gif"

for dirname, dirnames, filenames in os.walk(BASE_PATH):
    matches = list(filter_files(filenames, EXTENSIONS))