的Python:解析和目录中的文件名进行分组(Python: Parsing and groupin

2019-10-17 16:39发布

我很新的蟒蛇,但我有很多的经验与MATLAB&C.

我需要做的是分析文件的文件名中的一个特定的目录,根据文件名中的字段他们分成组,这些组中执行的操作是什么。

具体而言,文件名是:

PROJECT-x-SUBJECT-x-SESSION-x-TYPE.extension

如该“-X-”是特意插入作为该领域分频器。 我需要做的每一个共享相同PROJECT-X-主题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)

那么至少我有SESSION名称的唯一列表

建议? 我可以继续下去,但因为我真的只需要一个起点,我认为这是不够的。

多谢你们。

Answer 1:

您可以使用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包含会话名称和文件名之间的映射。



Answer 2:

如何使用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


文章来源: Python: Parsing and grouping filenames in directory