2009-04-15 11 views
1

ファイル名のリストが特定のパターンと一致するかどうか、およびそのパターンから欠落しているファイルがあるかどうかをPythonでどのように書きますか?たとえば、次のようにALPHANUMERIC - Pythonに見つからない数値が見つかりました

入力 - >

KUMAR.3.txt 
KUMAR.4.txt 
KUMAR.6.txt 
KUMAR.7.txt 
KUMAR.9.txt 
KUMAR.10.txt 
KUMAR.11.txt 
KUMAR.13.txt 
KUMAR.15.txt 
KUMAR.16.txt 

所望の出力 - >

KUMAR.5.txt 
KUMAR.8.txt 
KUMAR.12.txt 
KUMAR.14.txt 

入力 - >

KUMAR3.txt 
KUMAR4.txt 
KUMAR6.txt 
KUMAR7.txt 
KUMAR9.txt 
KUMAR10.txt 
KUMAR11.txt 
KUMAR13.txt 
KUMAR15.txt 
KUMAR16.txt 

所望の出力 - >

パターンを想定し
KUMAR5.txt 
KUMAR8.txt 
KUMAR12.txt 
KUMAR14.txt 
+0

をこの質問を言い換えてください。あなたが求めていることはまったく明らかではありません。 – kquinn

+0

ファイルは順番に並んでいますか?ファイルは常に与えられたパターンと一致しますか?クマー。##。txt? – dustyburwell

答えて

1

は比較的静的であり、これは正規表現で十分に簡単です:

import re 

inlist = "KUMAR.3.txt KUMAR.4.txt KUMAR.6.txt KUMAR.7.txt KUMAR.9.txt KUMAR.10.txt KUMAR.11.txt KUMAR.13.txt KUMAR.15.txt KUMAR.16.txt".split() 

def get_count(s): 
    return int(re.match('.*\.(\d+)\..*', s).groups()[0]) 

mincount = get_count(inlist[0]) 
maxcount = get_count(inlist[-1]) 
values = set(map(get_count, inlist)) 
for ii in range (mincount, maxcount): 
    if ii not in values: 
     print 'KUMAR.%d.txt' % ii 
2

あなたはこれをアプローチすることができます:整数を適切なためにファイル名を変換

  1. 見つからない数字を見つけます。
  2. 不足している番号をファイル名テンプレートと組み合わせて出力します。

(1)の場合、ファイル構造が予測可能な場合、これは簡単です。

def to_num(s, start=6): 
    return int(s[start:s.index('.txt')]) 

考える:map(to_num, lst):あなたがすることによって知られている番号のリストを取得することができます

lst = ['KUMAR.3.txt', 'KUMAR.4.txt', 'KUMAR.6.txt', 'KUMAR.7.txt', 
     'KUMAR.9.txt', 'KUMAR.10.txt', 'KUMAR.11.txt', 'KUMAR.13.txt', 
     'KUMAR.15.txt', 'KUMAR.16.txt'] 

。もちろん、ギャップを探すには、実際には最小値と最大値だけが必要です。それを range関数と組み合わせると、表示されるべき数値がすべて得られます。そして、得られた数値を削除します。セットはここで役立ちます。一緒にすべてを置く

def find_gaps(int_list): 
    return sorted(set(range(min(int_list), max(int_list))) - set(int_list)) 

missing = find_gaps(map(to_num, lst)) 
for i in missing: 
    print 'KUMAR.%d.txt' % i 
関連する問題