Seite 1 von 1
Dateien umbenennen mit Python
Verfasst: Mittwoch 23. Mai 2018, 14:52
von sn0oz3
Hallo Community,
ich befasse mich seit 3 Tagen etwas intensiver mit Python und habe mir ein kleines Szenario gebastelt:
Ich habe einen Ordner mit 5 Dateien angelegt, die heißen einfach nur 1,2,3 usw. Diese wollte ich mittels Python in folgendes Schema bringen "file1.txt", "file2.txt", usw.
Mein Code tut an sich das, was er soll, allerdings liefert mir IDLE auch einen Fehler. Da ich ein absoluter Anfänger bin, bitte ich um Nachsicht und hoffe auf den ein oder anderen Tipp von euch, wie man es besser machen kann.
Grüße
sn0oz3
Code: Alles auswählen
#------------------------------------------#
# Importieren der benötigten Bibliotheken #
#------------------------------------------#
import os
#------------------------------------------#
# Variablen deklarieren #
#------------------------------------------#
datei = "file"
ende =".txt"
#------------------------------------------#
# Schleife #
#------------------------------------------#
for x in range(0,4):
for i in range(1,6):
inhalt = os.listdir()
name = datei + str(i) + ende
os.rename(str(inhalt[x]), name)
Re: Dateien umbenennen mit Python
Verfasst: Mittwoch 23. Mai 2018, 15:29
von ThomasL
Ersetze mal os.rename durch print und schau mal was da so ausgegeben wird und in der Doku zu os.rename ob die Funktion damit arbeiten kann.
Code: Alles auswählen
for x in range(0,4):
for i in range(1,6):
inhalt = os.listdir()
name = datei + str(i) + ende
print((str(inhalt[x]), name))
Re: Dateien umbenennen mit Python
Verfasst: Mittwoch 23. Mai 2018, 15:32
von Kebap
sn0oz3 hat geschrieben: Mittwoch 23. Mai 2018, 14:52
allerdings liefert mir IDLE auch einen Fehler. Da ich ein absoluter Anfänger bin, bitte ich um Nachsicht und hoffe auf den ein oder anderen Tipp von euch, wie man es besser machen kann.
Hallo, du könntest den Fehler hier rein kopieren.

Re: Dateien umbenennen mit Python
Verfasst: Mittwoch 23. Mai 2018, 15:58
von Sirius3
Du hast 5 Dateien aber 25 Schleifendurchgänge. Da kann also etwas nicht stimmen. Welche Datei Du jetzt in welche umbenannt hast, ist im Glücksfall reiner Zufall. Im schlimmsten Fall heißen zum Schluß alle Dateien gleich, also "datei6.txt", also 4 der fünf Dateien sind verloren. Du mußt Dich entscheiden, ob Du die Dateinamenpaare rein generisch aus Nummern erzeugst, oder ob Du die Verzeichnisliste durchgehst und die Dateiennamen nach einem Muster veränderst. Du machst gerade beides gleichzeitig, was nur zu Chaos führt.
Re: Dateien umbenennen mit Python
Verfasst: Mittwoch 23. Mai 2018, 19:43
von sn0oz3
Vielen Dank schon einmal für die Antworten
Leider wurde ich aus der Dokumentation nicht wirklich schlauer.
@Sirius3: Ich will auf jeden Fall die Dateien nach einem bestimmten Muster der Reihe nach verändern. Und genau da hängt es bei mir. Ich habe keine Idee außer das wirre Konstrukt, das ich gebastelt habe.
Re: Dateien umbenennen mit Python
Verfasst: Mittwoch 23. Mai 2018, 23:00
von kbr
@sn0oz3: wenn Dir ein Muster vorschwebt, dann wirst Du gewiss eine Vorstellung davon haben. Wie kommst Du auf das "wirre Konstrukt"? Besser Du erklärst das Muster der vorliegenden Dateinamen und nach welchem Schema Du diese umbenennen möchtest. Dann kommt vielleicht etwas Klarheit in Dein Vorhaben.
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 06:58
von sn0oz3
Also der Gedanke ist, wie gesagt ich bin blutiger Anfänger, daher das wirre Konstrukt, dass ich alle Dateien in einem Ordner nach dem Schema file1, file2, file3, usw. umbenenne und dabei der ursprüngliche Dateiname keine Rolle spielt.
Edit: Das große Problem für mich ist, die Schleife zu erstellen, die Datei für Datei durchgeht und dabei hinten eine fortlaufende Nummer, beginnend bei 1, anhängt
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 07:21
von Sirius3
erster Schritt zur Lösung des Problems ist, das Problem möglichst exakt zu formulieren. Du hast einen Dateinamen A und willst in nach Dateinamen B umbenennen. Wie ist die Regel?
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 07:35
von sn0oz3
Naja nach welchem Schema ich es vorgesehen hatte, habe ich bereits erwähnt.
Konnte es jetzt aber auch endgültig realisieren, wie ich es wollte.
Falls es Verbesserungsvorschläge gibt, gerne her damit
Code: Alles auswählen
#------------------------------------------#
# Importieren der benötigten Bibliotheken #
#------------------------------------------#
import os
#------------------------------------------#
# Variablen deklarieren #
#------------------------------------------#
datei = "file"
end = ".txt"
#------------------------------------------#
# Schleife #
#------------------------------------------#
i = 1
for x in range(0,len(os.listdir())-1):
inhalt = os.listdir()
name = datei + str(i) + end
os.rename(str(inhalt[0]), name)
i +=1
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 08:06
von Sirius3
Du willst also, dass wenn in einem Verzeichnis n Dateien sind, n-1 mal eine beliebige dieser Dateien nach "file{i}.txt" umbenannt wird?
Wenn Dir also egal ist, wie welche Datei heißt, warum willst Du sie dann umbenennen? Und warum gerade n-1 mal?
Mit anderen Worten, das Programm macht im besten Fall zufällig das, was Du willst.
Meine Frage war nicht, ob wir wissen, wie Du die Dateien umbenennen willst, sondern ob Du es weißt. Und auch wenn Du es weißt, aber nicht in der Lage bist, es präzise zu formulieren, ist es schwierig, das in ein Programm umzusetzen. Daher nochmal die Aufgabe: Formuliere so präzise wie möglich, nach welchem Schema Du eine Menge an Dateien in eine andere Menge von Dateien umbenennen willst.
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 17:59
von kbr
Ich hätte hier einen Verbesserungsvorschlag. Die Verbesserung besteht darin, dass alle Dateien berücksichtigt werden

:
Code: Alles auswählen
import os
import random
import string
characters = string.ascii_letters + string.digits
for each in os.listdir():
os.rename(each, ''.join(random.sample(characters, 8)))
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 18:38
von Sirius3
@kbr: und wieder mit der Chance, dass Dateien im Nirvana verschwinden.
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 19:22
von kbr
@Sirius3: Dieses Feature bleibt ausdrücklich erhalten ... schmunzeln ist erlaubt ...

... denn dieser Code ist genau wie der ursprüngliche auch ... sinnfrei ...
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 19:43
von sn0oz3
Sirius3 hat geschrieben: Donnerstag 24. Mai 2018, 08:06
Meine Frage war nicht, ob wir wissen, wie Du die Dateien umbenennen willst, sondern ob Du es weißt. Und auch wenn Du es weißt, aber nicht in der Lage bist, es präzise zu formulieren, ist es schwierig, das in ein Programm umzusetzen. Daher nochmal die Aufgabe: Formuliere so präzise wie möglich, nach welchem Schema Du eine Menge an Dateien in eine andere Menge von Dateien umbenennen willst.
Ich frage mich, wo es hier Zweifel daran gibt, dass ich nicht weiß, was ich möchte. Steht eigentlich alles hier:
"Ich habe einen Ordner mit 5 Dateien angelegt, die heißen einfach nur 1,2,3 usw. Diese wollte ich mittels Python in folgendes Schema bringen "file1.txt", "file2.txt", usw."
Ich habe mir als Anfänger einfach eine Problematik ausgedacht, Sinn hin oder her. Zum Schluss habe ich ja mein Ziel erreicht. Ich wollte lediglich wissen, deshalb habe ich auch den Code gepostet, wo der Fehler in meiner Schleife liegt.
Naja...
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 19:54
von kbr
sn0oz3 hat geschrieben: Donnerstag 24. Mai 2018, 19:43
die heißen einfach nur 1,2,3 usw. Diese wollte ich mittels Python in folgendes Schema bringen "file1.txt", "file2.txt", usw."
Das ist zumindest für mich in Deinem recht unglücklichen Code untergegangen. Dabei wäre die Lösung dann doch sehr einfach gewesen:
Code: Alles auswählen
for each in some_collection:
os.rename(each, 'file{}.txt'.format(each))
Re: Dateien umbenennen mit Python
Verfasst: Donnerstag 24. Mai 2018, 20:08
von sn0oz3
Ja das mag natürlich sein, aber mir würde ja geraten meine Frage präziser zu formulieren. Dass der Code höchstwahrscheinlich nicht die beste Art und Weise ist, war mir klar.
kbr hat geschrieben: Donnerstag 24. Mai 2018, 19:54
Das ist zumindest für mich in Deinem recht unglücklichen Code untergegangen. Dabei wäre die Lösung dann doch sehr einfach gewesen:
Code: Alles auswählen
for each in some_collection:
os.rename(each, 'file{}.txt'.format(each))
Danke, denn genau auf so etwas wollte ich hinaus. Werde es morgen gleich ausprobieren.