[英]Python: Parsing and grouping filenames in directory
我是python的新手,但是我在MATLAB&C方面有很多经验。
我需要做的是解析特定目录中文件的文件名,根据文件名中的字段将它们分成几组,然后在这些组中执行操作。
具体来说,文件名是:
PROJECT-x-SUBJECT-x-SESSION-x-TYPE.extension
专门插入了“ -x-”作为字段分隔符的位置。 我需要对共享相同PROJECT-x-SUBJECT-x-SESSION组件的每组文件进行操作。
__ _ ____ 我的最佳尝试是: __ _ __ _ __
我可以通过以下方式一次解析每个文件:
dirList=os.listdir(directory)
for fname in dirList:
# kill extension
ext = os.path.splitext(fname)
# get the 4 fields
labels=ext[0].split('-x-')
PROJECT_list.append(labels[0])
SUBJECT_list.append(labels[1])
...
...反映了我对如何组织这些东西的唯一想法:通过创建4个列表并为每个文件名附加这些列表。
然后用我的4个(排序的?)列表,我可以这样称呼:
from collections import Counter
c=Counter(SESSION_list)
list(c)
然后至少我有一个唯一的会话名称列表
有什么建议吗? 我可以继续,但是由于我真的只需要一个起点,所以我认为这已经足够。
多谢你们。
您可以使用defaultdict
制作包含列表的字典:
from collections import defaultdict
groups = defaultdict(list)
for filename in os.listdir(directory):
basename, extension = os.path.splitext(filename)
project, subject, session, ftype = basename.split('-x-')
groups[session].append(filename)
现在, groups
包含会话名称和文件名之间的映射。
如何使用defaultdict
对文件名进行分组,使用glob
查找合适的文件以及使用fileinput
从具有相同键的所有文件中读取行的方式。 (未试)
import os
from glob import glob
import fileinput
from collections import defaultdict
filenames = glob('*-x-*')
dd = defaultdict(list)
for filename in filenames:
name, ext = os.path.splitext(filename)
dd[tuple(name.split('-x-')[:3])].append(filename)
for key, fnames in dd.iteritems():
for line in fileinput.FileInput(fnames):
pass # do something with lines from files with same key
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.