2016-04-12 24 views
1

Belirli dosya adlarını arayan bir dizinden okuyorum. Karşılaştırma için her dosya adından '.xml' belge etiketini kaldırabilirim. Sorun, yaklaşık% 10'unun başlık sonunda altı haneli bir zaman damgası olmasıdır.Normal İfade: Dosya Adından Zaman Damgasını Kaldırma

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' 

Programım, hangi dosyaların zaman damgasının olduğu sopayı bilmeyecek. Bazı zaman damgaları - zaman damgası içermez - doğal olarak bir veya iki sayı ile sona erer. Bilgime, sadece damgalı dosya adları bu formatta _###### biçiminde sona erecek.

nasıl sonuna _###### bağlı tam olarak altı basamağı ile dosya adlarını tanır ve karşılaştırma yapmaya yönelik dize gelenler rakamları kaldırmak için regex kullanabilir?

cevap

2

Sen re.sub() ile dosya adının sonunda tam 6 basamak maç ve kaldırmak için \d{6}$ deseni kullanabilirsiniz: eugene tarafından verilen

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

Yardımın için teşekkürler! –

1

cevap mükemmeldir. Bu regex'i daha da geliştirmek istiyorum, böylece bir dosya isminden sonra herhangi bir sayıdaki basamak durumunda çalışacaktır. İşte değiştirilen normal ifade:

filename = re.sub(r'_\d*$', "", filename)