根据文件名过滤文件
Filter files based on file name
我有一个文件夹,里面有 4 种不同的文件。例如:
类型 1:00001_a.png
类型 2:00231_b.mat
类型 3:00001_c.jpg
类型 4:00001_c.png
如何将这些文件过滤成 4 个列表?我目前的解决方案只能根据文件扩展名进行过滤。
all_file = os.walk(input_path).next()[2] #get files only
list_one = [ fi for fi in all_file if fi.endswith("*.png") ] # "*_a.png" won't work
只需省略 endswith()
中的星号 (*
),它将按预期工作,例如fi.endswith('_a.png')
.
提出更好的解决方案,避免 hard-coding 支持的类型:
from collections import defaultdict
def get_file_type(filename):
base, ext = os.path.splitext(filename)
return base.rsplit('_', 1)[1] + ext
files_by_type = defaultdict(list)
for filename in os.listdir(input_path):
filetype = get_file_type(filename)
files_by_type[filetype].append(filename)
考虑使用 os
模块列表目录的正则表达式解决方案:
import os, re
# CURRENT DIRECTORY OF RUNNING SCRIPT (OR MANUALLY ENTER PATH)
cd = os.path.dirname(os.path.abspath(__file__))
a_pngfiles = [file for file in os.listdir(cd) if re.match("^.*_a.png$", file)]
b_matfiles = [file for file in os.listdir(cd) if re.match("^.*_b.mat$", file)]
c_jpgfiles = [file for file in os.listdir(cd) if re.match("^.*_c.jpg$", file)]
c_pngfiles = [file for file in os.listdir(cd) if re.match("^.*_c.png$", file)]
我有一个文件夹,里面有 4 种不同的文件。例如:
类型 1:00001_a.png
类型 2:00231_b.mat
类型 3:00001_c.jpg
类型 4:00001_c.png
如何将这些文件过滤成 4 个列表?我目前的解决方案只能根据文件扩展名进行过滤。
all_file = os.walk(input_path).next()[2] #get files only
list_one = [ fi for fi in all_file if fi.endswith("*.png") ] # "*_a.png" won't work
只需省略 endswith()
中的星号 (*
),它将按预期工作,例如fi.endswith('_a.png')
.
提出更好的解决方案,避免 hard-coding 支持的类型:
from collections import defaultdict
def get_file_type(filename):
base, ext = os.path.splitext(filename)
return base.rsplit('_', 1)[1] + ext
files_by_type = defaultdict(list)
for filename in os.listdir(input_path):
filetype = get_file_type(filename)
files_by_type[filetype].append(filename)
考虑使用 os
模块列表目录的正则表达式解决方案:
import os, re
# CURRENT DIRECTORY OF RUNNING SCRIPT (OR MANUALLY ENTER PATH)
cd = os.path.dirname(os.path.abspath(__file__))
a_pngfiles = [file for file in os.listdir(cd) if re.match("^.*_a.png$", file)]
b_matfiles = [file for file in os.listdir(cd) if re.match("^.*_b.mat$", file)]
c_jpgfiles = [file for file in os.listdir(cd) if re.match("^.*_c.jpg$", file)]
c_pngfiles = [file for file in os.listdir(cd) if re.match("^.*_c.png$", file)]