2016-04-30 42 views
0

ファイルのフォルダ内のファイル名から番号シーケンスを特定して分離し、オプションで非連続シーケンスを特定する必要があります。ファイルは.dpxファイルです。ファイル名のどこかにシーケンス番号があり、拡張子が '.dpx'であることを除いて、ファイル命名構造はほとんどありません。 PySeqと呼ばれるすばらしいモジュールがあります。PySeqは何千ものディレクトリ、時には何十万ものファイルのディレクトリを爆撃する以外は、すべての難しい作業を行うことができます。 msgstr "引数リストが大きすぎます" msgid。誰もシーケンス番号分離と特にdpxファイルでの作業経験がありましたか?各ファイルのサイズは最大100MBです。私はPython2.7を使ってCentOSボックスに取り組んでいます。ファイル名のようなものかもしれません:
test00_take1_00001.dpx
test00_take1_00002.dpx
another_take_ver1-0001_3.dpx
another_take_ver1-0002_3.dpx
(連続する二つの系列)ファイル名シーケンス抽出python

+0

(あなたにもこの部分にスキップして、メモリに関する効率化のためのリストの発電機にそれを回すかもしれない)1つのリストにリストのすべてに参加しますエラーが発生しますか? –

答えて

0

これは、あなたがしている正確に何をすべき探している。これは、文字列の開始と終了を含むdictsのdictを作成し、リストに完全な文字列を入れます。

それは、あなたのコードがそれである何

from collections import defaultdict 

input_list = [ 
    "test00_take1_00001.dpx", 
    "test00_take1_00002.dpx", 
    "another_take_ver1-0001_3.dpx", 
    "another_take_ver1-0002_3.dpx"] 

results_dict = defaultdict(lambda: defaultdict(list)) 
matches = (re.match(r"(.*?[\W_])\d+([\W_].*)", item) for item in input_list) 
for match in matches: 
    results_dict[match.group(1)][match.group(2)].append(match.group(0)) 

results_list = [d2 for d1 in results_dict.values() for d2 in d1.values()] 

>>> results_list 
[['another_take_ver1-0001_3.dpx', 'another_take_ver1-0002_3.dpx'], ['test00_take 
1_00001.dpx', 'test00_take1_00002.dpx']] 
+0

ありがとうBharel !!これは素晴らしいです。私は発電機について何も知らないので、これは大きなインセンティブです。 :)ありがとうございました。 – tinker242

+0

こんにちは@ tinker242あなたの質問が解決した場合は、チェックマークをクリックして[受諾する](http://meta.stackexchange.com/q/5234/179419)を検討してください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。これを行う義務はありません。 – Bharel

+0

申し訳ありません。私はここでもまだ少し新しいです。あなたの答えは絶対に私の問題を解決しました。 :) – tinker242

関連する問題