Hallo zusammen,
ich habe eine Frage bezüglich einer Dateinamenänderung von mehreren Dateien für einen Dateityp. Da es sich um sehr viele Dateien handelt, wäre hier ein Hilfstool in Python hilfreich bzw. sinnvoll.
Mir ist bekannt wie ich ein RENAME von einer Datei vornehmen kann, aber nicht für eine Vielzahl von Dateien. Das Problem ist, dass ich 2 wichtige Faktoren berücksichtigen muss:
1. Ein Teil des alten Dateinamens soll weiterverwendet werden (Nummern aus dem Namen) + neuen Dateinamenteil (spezielle wechselnde Bezeichnung) --> Es werden unterschiedliche Namen benötigt und können nicht als Form Datei_Name_1 genutzt werden. Hierzu wäre eine txt Datei oder Exceldatei mit den neuen Namen notwendig
2. Die alte Dateinamenbezeichnung muss anhand eines Wertes durchsucht werden (Nummer zur Identifizierung) und dann in die neue Form gebracht werden. Der neue Dateiname sollte [Nummer]_[spez.Bezeichnung].extension sein.
Für die 1. könnte eine Exceldatei mit den Zuordnungen (Nummer + neuer Dateiname) erstellt werden. Nur wie schaffe ich es, dass die Exceldatei gelesen wird, das Verzeichnis mit den alten Dateien durchsucht wird und dann anhand der Zuordnung eine Umbenennung der Datei stattfindet?
Kann mir hier jemand weiterhelfen bzw. Codeansätze geben?
Vielen Dank.
Mehrere Dateinamen ändern
Zum Lesen von Exceldateien gibt es Openpyxl. Zum Durchsuchen gibt es pathlib, Zuordnungen macht man mit Wörterbüchern. Zu allem gibt es Dokumentation mit Codebeispielen.
Wenn Du konkrete Fragen zu Deinem Code hast, dann kannst Du den gerne hier posten, mit Beispieldaten, damit wir die vielen Umbenennungen besser vorstellen können.
Wenn Du konkrete Fragen zu Deinem Code hast, dann kannst Du den gerne hier posten, mit Beispieldaten, damit wir die vielen Umbenennungen besser vorstellen können.
- __blackjack__
- User
- Beiträge: 14069
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wobei man „Excel-Datei“ hier vielleicht auch als CSV-Datei interpretieren könnte. Lässt sich mit Excel erstellen, ist aber vom Format her einfacher und es gibt das `csv`-Modul in der Standardbibliothek.
Zum suchen nach der Nummer im alten Namen könnte eventuell das `re`-Modul hilfreich sein. Es sei denn die alten Namen sind so aufgebaut, dass man da durch aufteilen an Trennzeichen einfacher heran kommt.
Wie Sirius3 schon geschrieben hat: An der Stelle wo Du dann konkret nicht weiter kommst, wären Beispiele von den Daten, also hier den Dateinamen nützlich.
Zum suchen nach der Nummer im alten Namen könnte eventuell das `re`-Modul hilfreich sein. Es sei denn die alten Namen sind so aufgebaut, dass man da durch aufteilen an Trennzeichen einfacher heran kommt.
Wie Sirius3 schon geschrieben hat: An der Stelle wo Du dann konkret nicht weiter kommst, wären Beispiele von den Daten, also hier den Dateinamen nützlich.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Hallo Sirius3, Hallo __blackjack__,
danke für eure Rückmeldungen.
Ich habe bereits mit der xlxs-Datei das Einlesen mittels pandas getestet und listet mir in der Konsole die richtigen Spalten und Zeilen aus. Wenn jedoch eine Umwandlung in CSV und die Verwendung hier einfacher ist, dann werde ich mir dies mal anschauen.
Die Dateinamenstruktur sieht aktuell leider sehr unschön aus: 001000009_001_000000000005005142_M_000004_0170.PRG
Die Dateiendung ist zum Glück hier immer identisch mit .PRG
Wichtig für die Zuordnung wäre hier der mittlere Teil "5005142". Diese Nummer ist eine Eindeutige Nummer welche auch in der Excel / CSV Datei vorkommt. Hier müsste dann die Liste erstellt werden, richtig?
In meiner Excel /CSV Datei gibt es eine Spalte genau mit dieser eindeutigen Nummer und hier sind auch noch weitere Informationen enthalten. Für den neuen Dateinamen werden jedoch nur noch eine weitere Spalte benötigt. In dieser habe ich bereits schon den neuen Namen in der Excel /CSV Datei erstellt nach dem Schema 5005142-4_APHT120420R-D51 WTA51.
Was mir also hier noch fehlt ist nun diese Zusammenführung.
Also:
1. Lese Spalte X und speichere 1.Nummer (eventuell auch temporär) in eine Variable X1
2. Lese dazugehörige Spalte Y (bezogen auf Inhalt Spalte X) und speichere neuen Namen der Datei in eine Variable Y1
3. Lese Verzeichnis (Pfad der Dateien) und finde Datei anhand der Variable X1 (hier müsste dann mit Split gearbeitet werden wegen den Trennzeichen "_")
4. Benenne gefundene Datei (Variable X1) mit dem neuen Namen aus Variable Y1 um
5. Wiederhole den Vorgang solange, bis alle Zeilen in der Excel / CSV Datei in Spalte X durchgearbetet wurde
Was mir an der Stelle helfen kann ist ein Schritt für Schritt vorgehen, also auch Feedback von euch, um die 5 Schritte durchzuführen.
Als erstes werde ich die Excel Datei in eine CSV Datei umwandeln und dann mal versuchen, die erste Zeile von Spalte X als Variable zu speichern. Sowie auch die dazugehörige Spalte Y als Variable zu speichern.
Ich werde meine Fortschritte inkl. Code hier dann reinstellen und hoffe Ihr habt die Geduld mir dabei zu helfen, dass es zum einen funktioniert und zum anderen, dass ich manchmal einmal mehr nachfragen muss.
Vielen Dank.
danke für eure Rückmeldungen.
Ich habe bereits mit der xlxs-Datei das Einlesen mittels pandas getestet und listet mir in der Konsole die richtigen Spalten und Zeilen aus. Wenn jedoch eine Umwandlung in CSV und die Verwendung hier einfacher ist, dann werde ich mir dies mal anschauen.
Die Dateinamenstruktur sieht aktuell leider sehr unschön aus: 001000009_001_000000000005005142_M_000004_0170.PRG
Die Dateiendung ist zum Glück hier immer identisch mit .PRG
Wichtig für die Zuordnung wäre hier der mittlere Teil "5005142". Diese Nummer ist eine Eindeutige Nummer welche auch in der Excel / CSV Datei vorkommt. Hier müsste dann die Liste erstellt werden, richtig?
In meiner Excel /CSV Datei gibt es eine Spalte genau mit dieser eindeutigen Nummer und hier sind auch noch weitere Informationen enthalten. Für den neuen Dateinamen werden jedoch nur noch eine weitere Spalte benötigt. In dieser habe ich bereits schon den neuen Namen in der Excel /CSV Datei erstellt nach dem Schema 5005142-4_APHT120420R-D51 WTA51.
Was mir also hier noch fehlt ist nun diese Zusammenführung.
Also:
1. Lese Spalte X und speichere 1.Nummer (eventuell auch temporär) in eine Variable X1
2. Lese dazugehörige Spalte Y (bezogen auf Inhalt Spalte X) und speichere neuen Namen der Datei in eine Variable Y1
3. Lese Verzeichnis (Pfad der Dateien) und finde Datei anhand der Variable X1 (hier müsste dann mit Split gearbeitet werden wegen den Trennzeichen "_")
4. Benenne gefundene Datei (Variable X1) mit dem neuen Namen aus Variable Y1 um
5. Wiederhole den Vorgang solange, bis alle Zeilen in der Excel / CSV Datei in Spalte X durchgearbetet wurde
Was mir an der Stelle helfen kann ist ein Schritt für Schritt vorgehen, also auch Feedback von euch, um die 5 Schritte durchzuführen.
Als erstes werde ich die Excel Datei in eine CSV Datei umwandeln und dann mal versuchen, die erste Zeile von Spalte X als Variable zu speichern. Sowie auch die dazugehörige Spalte Y als Variable zu speichern.
Ich werde meine Fortschritte inkl. Code hier dann reinstellen und hoffe Ihr habt die Geduld mir dabei zu helfen, dass es zum einen funktioniert und zum anderen, dass ich manchmal einmal mehr nachfragen muss.
Vielen Dank.
Ich habe gerade überlegt, wenn ich eine CSV Datei habe und da auch die alten Dateinamen in einer Spalte vorhanden sind und auch die neuen Namen in einer anderen Spalte, kann ich dann nicht auch anhand der Datei und dem alten Dateinamen eine Umbenennung vornehmen? Also finde alten Dateinamen in der Datei in Spalte Z, erstelle eine Kopie im Pfad und benenne diese Kopie mit dem neuen Namen aus Spalte Y um.
Wäre diese Vorgehensweise nicht etwas einfacher?
Wäre diese Vorgehensweise nicht etwas einfacher?
- __blackjack__
- User
- Beiträge: 14069
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Rene1303: Wenn Du alten und neuen Dateinamen schon fertig in der Datei hast, dann ist das einfacher die zu verwenden, ja. Dann musst Du ja auch nichts mehr suchen, sondern kannst einfach direkt die Funktion/Methode zum umbenennen aufrufen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
@__blackjack__
Kann ich die Liste mit den Dateien aus dem Verzeichnis in eine separate Liste speichern, als Dict und dann in dieser Liste nach gleichen Namen aus der csv suchen? Wenn diese dann machen kann ich ja mit copyright die Datei in einem neuen Verzeichnis speichern und gleich den neuem Namen übergeben.
Nur wie bekomme ich aus os.listdir dies in eine andere Liste? Und wie kann ich dann das machen machen? Das copy und rename habe verstanden.
Kann ich die Liste mit den Dateien aus dem Verzeichnis in eine separate Liste speichern, als Dict und dann in dieser Liste nach gleichen Namen aus der csv suchen? Wenn diese dann machen kann ich ja mit copyright die Datei in einem neuen Verzeichnis speichern und gleich den neuem Namen übergeben.
Nur wie bekomme ich aus os.listdir dies in eine andere Liste? Und wie kann ich dann das machen machen? Das copy und rename habe verstanden.
Hallo,
ich bin gerade etwas ratlos. Ich arbeite mich durch die Listenerstellung und Methoden durch, was bis jetzt gut klappt. Dennoch habe ich ein Problem, was ich nicht lösen kann bzw. nichts dazu finde, was mir weiterhilft.
Ich habe festgestellt, dass in meiner CSV-Datei doppelte alte Dateinamen vorhanden sind, da diese Dateien vorher bei mehreren Zielressourcen verwendet wurde. Diese Zielressource gibt es hier natürlich nur einmal, aber die Datei, die verwendet wird, kann mehrmals auftauchen. Nun möchte ich wie folgt vorgehen:
Liste 1 = CSV Datei
Liste 2 = Dateien aus Pfad
Suche Dateiname von Liste 2 in Liste 1 (bestimmte Spalte alter Name) und gebe den Wert aus einer bestimmten Spalte (neuer Name) von Liste 1 aus. Dieser Wert soll dann für die shutil.copy methode verwendet werden, sodass hier der neue Name beim Kopieren verwendet werden kann. Eine reine Umbenennung würde mir hier nur einmalig die Datei umbenennen, jedoch wird diese bei mehreren Zielressourcen verwendet. Daher soll nun eine Kopie mit dem eindeutigen Namen verwendet werden.
Wie kann ich es hinbekommen, dass wenn der Wert aus Liste 2 in Liste 1 gefunden wurde, aber bereits verwendet wurde? Sodass hier dann auf den nächsten Eintrag gegangen wird, bis keine mehr vorhanden sind.
Hatte schon daran gedacht, dass ich zusätzlich Prüfen muss, ob die Datei mit dem neuen Namen bereits im Zielverzeichnis vorhanden ist und dann auf den nächsten Eintrag in der CSV Datei gehe. Gibt es hier eine elegante und einfache / verständliche Lösung?
Vielen Dank.
ich bin gerade etwas ratlos. Ich arbeite mich durch die Listenerstellung und Methoden durch, was bis jetzt gut klappt. Dennoch habe ich ein Problem, was ich nicht lösen kann bzw. nichts dazu finde, was mir weiterhilft.
Ich habe festgestellt, dass in meiner CSV-Datei doppelte alte Dateinamen vorhanden sind, da diese Dateien vorher bei mehreren Zielressourcen verwendet wurde. Diese Zielressource gibt es hier natürlich nur einmal, aber die Datei, die verwendet wird, kann mehrmals auftauchen. Nun möchte ich wie folgt vorgehen:
Liste 1 = CSV Datei
Liste 2 = Dateien aus Pfad
Suche Dateiname von Liste 2 in Liste 1 (bestimmte Spalte alter Name) und gebe den Wert aus einer bestimmten Spalte (neuer Name) von Liste 1 aus. Dieser Wert soll dann für die shutil.copy methode verwendet werden, sodass hier der neue Name beim Kopieren verwendet werden kann. Eine reine Umbenennung würde mir hier nur einmalig die Datei umbenennen, jedoch wird diese bei mehreren Zielressourcen verwendet. Daher soll nun eine Kopie mit dem eindeutigen Namen verwendet werden.
Wie kann ich es hinbekommen, dass wenn der Wert aus Liste 2 in Liste 1 gefunden wurde, aber bereits verwendet wurde? Sodass hier dann auf den nächsten Eintrag gegangen wird, bis keine mehr vorhanden sind.
Hatte schon daran gedacht, dass ich zusätzlich Prüfen muss, ob die Datei mit dem neuen Namen bereits im Zielverzeichnis vorhanden ist und dann auf den nächsten Eintrag in der CSV Datei gehe. Gibt es hier eine elegante und einfache / verständliche Lösung?
Vielen Dank.
Ich verstehe Dein Problem nicht.
Du hast eine Liste (alter Dateiname, neuer Dateiname)
Dann kannst Du doch einfach die Liste abarbeiten und die vier Fälle alte/neue Datei existiert/existiert nicht entsprechend behandeln.
Du hast eine Liste (alter Dateiname, neuer Dateiname)
Dann kannst Du doch einfach die Liste abarbeiten und die vier Fälle alte/neue Datei existiert/existiert nicht entsprechend behandeln.
Es gibt zum Umbenennen von vielen Dateien auch fertige Tools, dann muss man nicht das Rad neu erfinden, bspw. nutze ich seit Jahren gerne Joe:
http://toolsandmore.de/Central/Produkte ... Tools/Joe/
http://toolsandmore.de/Central/Produkte ... Tools/Joe/
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.