2

まず、簡単な質問で申し訳ありませんが、問題をコーディングする最も簡単な方法がわかりません。

いくつかの異なるファイルを含むディレクトリがありますが、共通の要素 (values_25、_26、_28 など) は次のとおりです。

xxxxx_25.txt
xxxxx_26.txt
xxxxx_27.txt
xxxxx_28.txt
yyyyy_25.txt
yyyyy_26.txt
yyyyy_27.txt
yyyyy_29.txt
mmmmm_25.txt
mmmmm_26.txt
mmmmm_27.txt
mmmmm_30.txt

リストを次のように取得したい

xxxxx_25.txt
yyyyy_25.txt
mmmmm_25.txt

xxxxx_26.txt
yyyyy_26.txt
mmmmm_26.txt

xxxxx_27.txt
yyyyy_27.txt
mmmmm_27.txt

xxxxx_28.txt

yyyyy_29.txt

mmmmm_30.txt
4

4 に答える 4

2

これはそれを行います:

list_of_files = [
    'xxxxx_25.txt',
    'xxxxx_26.txt',
    'xxxxx_27.txt',
    'xxxxx_28.txt',
    'yyyyy_25.txt',
    'yyyyy_26.txt',
    'yyyyy_27.txt',
    'yyyyy_29.txt',
    'mmmmm_25.txt',
    'mmmmm_26.txt',
    'mmmmm_27.txt',
    'mmmmm_30.txt',
    ]

import re
regex = re.compile('_([0-9]+)\.txt$')

def keyfn(name):
    match = regex.search(name)
    if match is None:
        return None
    else:
        return match.group(1)

import itertools
for (key, group) in itertools.groupby(sorted(list_of_files,key=keyfn),keyfn):
    print [x for x in group]

または、結果としてリストのリストが必要な場合は、forループを次のように置き換えます。

[x for g in itertools.groupby(sorted(list_of_files,key=keyfn),keyfn) for x in g[1]]
于 2013-01-31T15:30:26.337 に答える