2016-04-12 11 views
1

Ich lese durch ein Verzeichnis nach bestimmten Dateinamen. Ich bin in der Lage, das Dokument-Tag '.xml' von jedem Dateinamen zum Vergleich zu entfernen. Das Problem ist, dass etwa 10% von ihnen am Ende des Titels einen sechsstelligen Zeitstempel haben.Regulärer Ausdruck: Zeitstempel aus Dateiname entfernen

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' 

Mein Programm wird nicht wissen, welche Dateien einen Zeitstempel haben. Einige der Dateien - ohne Zeitstempel - enden natürlich auch mit ein oder zwei Zahlen. Nach meinem Wissen werden nur gestempelte Dateinamen in diesem Format _###### enden.

Wie kann ich regex zu Dateinamen mit genau sechs Ziffern an das Ende _###### und entfernen Sie diese Ziffern aus der Zeichenfolge zum Vergleich zu erkennen?

Antwort

2

Sie könnten das \d{6}$ Muster verwenden, um genau 6 Ziffern am Ende des Dateinamens übereinstimmen und entfernen Sie sie mit re.sub():

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

Danke für die Hilfe! –

1

Die Antwort von eugene gegeben perfekt. Ich möchte diese Regex weiter verbessern, so dass es im Falle einer beliebigen Anzahl von Ziffern nach einem Dateinamen funktioniert. Hier ist die modifizierte Regex:

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