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))