2016-04-12 22 views
1

特定のファイル名を探しているディレクトリを読んでいます。比較のために、すべてのファイル名から文書タグ'.xml'を削除できます。問題は、タイトルの最後に約10%の人が6桁のタイムスタンプを持つことです。正規表現:ファイル名からタイムスタンプを削除

file_list = os.listdir(directory_address) 

for entry in file_list:   
     re.sub('\.xml$','', entry).upper() 


#file name examples 

filename_1 = 'normal_filename' 

filename_2= 'another_normal_filename_A23' 

filename_3 = 'stamped_file_name_085373' 

私のプログラムは、どのファイルにタイムスタンプが付いているかわかりません。タイムスタンプのないファイルの中には、自然に1つまたは2つの数字で終わるものもあります。私の知る限り、スタンプされたファイル名だけがこの形式で終了します_######

regexを使用して、末尾にちょうど6桁の数字が付いたファイル名を認識し、その数字を文字列から削除して比較しますか?

答えて

2

あなたは、ファイル名の末尾に、正確に6桁の数字と一致してre.sub()でそれらを削除するには\d{6}$パターンを使用することができます。

>>> import re 
>>> filename = 'stamped_file_name_085373' 
>>> filename = re.sub(r"_\d{6}$", "", filename) 
>>> filename 
'stamped_file_name' 
+0

ありがとうございました! –

1

ユージンによって与えられた答えは完璧です。私はこの正規表現をさらに拡張して、ファイル名の後に任意の桁数の場合に機能するようにしたいと思います。ここに修正された正規表現があります:

filename = re.sub(r'_\d*$', "", filename) 
関連する問題