3

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

然后至少我有一个唯一的会话名称列表

建议?我可以继续,但因为我真的只需要一个起点,我认为这就足够了。

多谢你们。

4

2 回答 2

6

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

于 2013-02-06T00:44:50.290 回答
1

如何使用 adefaultdict对文件名进行分组、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
于 2013-02-06T00:46:08.503 回答