3

私はPythonにかなり慣れていませんが、MATLABとCの経験が豊富です。

私がする必要があるのは、特定のディレクトリ内のファイルのファイル名を解析し、ファイル名内のフィールドに従ってそれらをグループに分け、これらのグループ内で操作を実行することです。

具体的には、ファイル名は次のとおりです。

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

ここで、その「-x-」はフィールドディバイダーとして意図的に挿入されています。同じPROJECT-x-SUBJECT-x-SESSIONコンポーネントを共有するファイルのすべてのグループに対して操作を行う必要があります。

_______私の最善の試みは次のとおりです。__ _ __ _ __

次の方法で、各ファイルを一度に1つずつ解析できます。

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名の一意のリストがあります

提案?先に進むこともできますが、本当に出発点が必要なので、これで十分だと思います。

みんなありがとう。

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

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
于 2013-02-06T00:46:08.503 に答える