Dateien umbenennen 054 Dieses Python Programm benennt Dateien in einem vorher gewählten Ordner um. RenameFilesV1_1.zipHerunterladen Benutzung: Python Datei herunterladen z.B. auf den DesktopDatei per Doppelklick ausführen, dann erscheint ein Konsolenfenster: Mit Hilfe von Nummerneingaben kann das Programm gesteuert werden.Zuerst wählt man mit „1“ ein Verzeichnis aus, in dem sich die Dateien befinden, die umbenannt werden sollen.Nun wählt man mit „2“ aus, dass alle Dateinamen in eine Textdatei geschrieben werden sollen: „Dateinamen.txt“Diese Textdatei kann man nun auch händisch verändern. Die Dateinamen werden mit dem Delimiter „|“ getrennt, wobei links der aktuelle Dateiname steht und rechts der Dateiname, den die Datei bekommen soll.Zum Schluss wählt man „3“ und bekommt nochmal eine Zusammenfassung angezeigt, welche Dateien wie umbenannt werden sollen. Wenn man dann in der Konsole „ja“ eingibt werden die Dateien umbenannt. # Bibliotheken werden importiert from os import listdir, rename, path, system, name import csv import sys from tkinter import Tk from tkinter.filedialog import askopenfilename, askdirectory class delimiterTab: delimiter = '\t' name = 'Tabulator' class delimiterPipe: delimiter = '|' name = 'Pipe |' # Globale Variablen, auf die von überall zugegriffen werden kann PfadZuDateien = '' meineDateienGefiltert = [] myDelimiter = delimiterTab # Hier kann man Dateiendungen oder ganze Dateinamen eintragen die ignoriert werden sollen DateiendungenIgnorieren = ('.pdf') # leer -> () DateinamenIgnorieren = ('Dateinamen.txt', 'RenameFilesV1_1.py') # leer -> () # Funktionen: # F1: Entfernt alle Ordner aus der Liste der Dateien def filterDateien(): meineDateien = listdir(PfadZuDateien) for datei in meineDateien: if not path.isdir(path.join(PfadZuDateien, datei)): global meineDateienGefiltert meineDateienGefiltert.append(datei) # F2: Schreibt die Dateinamen in eine Textdatei, die dann benutzt wird um die eigentlichen Dateien umzubenennen def writeFileNamesToTxt(files): with open(PfadZuDateien + 'Dateinamen.txt', 'w+', newline='') as names_file: name_writer = csv.writer(names_file, delimiter=myDelimiter.delimiter) print('Option auswählen:\n1 - Dateiname'+myDelimiter.delimiter+' \n2 - Dateiname'+myDelimiter.delimiter + ' Dateiname\n3 - fortlaufend mit Präfix: Name_01-99\n4 - fortlaufend mit Suffix: 01-99_Name\n5 - mit Textdatei') eingabe = input() clear() if eingabe == '3': print('Prefix eingeben: z.B. "Datei_"') eingabePrefix = input() elif eingabe == '5': Tk().withdraw() externFilename = askopenfilename() externAlllines = open(externFilename).read().splitlines() elif eingabe == '4': print('Suffix eingeben: z.B. "_Datei"') eingabeSuffix = input() counter = 1 for fileName in files: if not fileName.endswith(DateiendungenIgnorieren) and fileName not in DateinamenIgnorieren: if eingabe == '1': name_writer.writerow([fileName, '']) print(fileName + myDelimiter.delimiter) elif eingabe == '2': name_writer.writerow([fileName, fileName]) print(fileName + myDelimiter.delimiter + fileName) elif eingabe == '3': extension = fileName.split('.') name_writer.writerow( [fileName, eingabePrefix + str("{0:0=2d}".format(counter)) + '.' + extension[-1]]) print(fileName + myDelimiter.delimiter + eingabePrefix + str("{0:0=2d}".format(counter)) + '.' + extension[-1]) counter += 1 elif eingabe == '4': extension = fileName.split('.') name_writer.writerow([fileName, str("{0:0=2d}".format( counter)) + eingabeSuffix + '.' + extension[-1]]) print( fileName + myDelimiter.delimiter + str("{0:0=2d}".format(counter)) + eingabeSuffix + '.' + extension[-1]) counter += 1 elif eingabe == '5': extension = fileName.split('.') if counter-1 < len(externAlllines) and externAlllines[counter-1] != '': name_writer.writerow( [fileName, externAlllines[counter-1] + '.' + extension[-1]]) print(fileName + myDelimiter.delimiter + externAlllines[counter-1] + '.' + extension[-1]) else: name_writer.writerow([fileName, '']) print(fileName + myDelimiter.delimiter) counter += 1 print('\n-> Dateinamen in "Dateinamen.txt" geschrieben.') # F3: Benennt die Dateien anhand der Namen in der Textdatei um def renameFilesAsInTextfile(type): with open(PfadZuDateien + 'Dateinamen.txt') as names_file: csv_reader = csv.reader(names_file, delimiter=myDelimiter.delimiter) if type == 0: for row in csv_reader: if f'{row[1]}' == '': print(f'{row[0]}' + ' -> ' + 'keine Änderung!') else: print(f'{row[0]}' + ' -> ' + f'{row[1]}') else: for row in csv_reader: if f'{row[1]}' != '': rename(PfadZuDateien + f'{row[0]}', PfadZuDateien + f'{row[1]}') print( 'Datei: ' + f'{row[0]}' + ' wurde zu ' + f'{row[1]}' + ' umbenannt.') #F4: Start def start(): global PfadZuDateien global myDelimiter # Auswahlmenü: print('\nWillkommen bei einem einfachen Dateiumbenennungsprogramm!') print('\n1 - Verzeichnis mit Dateien auswählen.') if PfadZuDateien != '': print('2 - Dateinamen in die Datei "Dateinamen.txt" schreiben.') print('3 - Dateien nach "Dateinamen.txt" umbenennen?') print('4 - Trennzeichen wählen. Aktuell ausgewählt: ' + myDelimiter.name) print('5 - Beenden') eingabe = input() # check user input: if eingabe == '1': clear() Tk().withdraw() PfadZuDateien = askdirectory() PfadZuDateien += '/' filterDateien() print('Ausgewählter Pfad: ' + PfadZuDateien) start() elif eingabe == '2': clear() writeFileNamesToTxt(meineDateienGefiltert) start() elif eingabe == '3': clear() renameFilesAsInTextfile(0) print('\nWollen Sie folgende Umbenennung durchführen? \nja - nein') bestaetigen = input() clear() if bestaetigen == 'ja': renameFilesAsInTextfile(1) start() elif eingabe == '4': clear() print('\nWelches Trennzeichen wollen Sie wählen? \n1 - Tabulator (kann gut in Excel genutzt werden)\n2 - Pipezeichen |') trennzeichen = input() if(trennzeichen == '1'): myDelimiter = delimiterTab elif(trennzeichen == '2'): myDelimiter = delimiterPipe clear() start() elif eingabe == '5': sys.exit() #F5: Console clear function def clear(): # for windows if name == 'nt': _ = system('cls') # for mac and linux(here, os.name is 'posix') else: _ = system('clear') start() # end: input("\nDrücke ENTER um das Programm zu beenden...") unsere-schule.org × Dateien umbenennen Code: 054 Infos: unsere-schule Codes