Seite 1 von 1
Benennung von Files
Verfasst: Donnerstag 13. Februar 2014, 22:14
von MarcelF6
Hallo zusammen,
ich würde gerne meine Files, die momentan nur aus Integers bestehen (10000001.xml, ....), umbenennen.
Der Namensanfang soll immer gleich sein, also: "deutsch_01_" und dann soll eine Zahl ab "01" folgen, d.h.:
deutsch_01_01.xml
deutsch_01_02.xml
usw.
Wie bekommt man das hin, inbesondere das "0" für Zahlen zwischen 1 und 9?
Mit Integers kanns schwierig werden, oder?
Code: Alles auswählen
for filename in os.listdir("."):
if filename.startswith("1"):
os.rename(filename, "deutsch_01_" + )
Herzlichen Dank für jeden Tipp.

Re: Benennung von Files
Verfasst: Donnerstag 13. Februar 2014, 22:16
von BlackJack
@MarcelF6: Zeichenkettenformatierung ist das Stichwort. Heutzutage mit der `format()`-Methode auf Zeichenketten. Da kann man für Zahlen alle möglichen Formatierungsanweisungen verwenden, inklusive wieviele Stellen, ob führende 0en oder nicht, …
Re: Benennung von Files
Verfasst: Donnerstag 13. Februar 2014, 23:00
von MarcelF6
Danke für den Tipp.
Ich machte es in der Zwischenzeit so:
Code: Alles auswählen
import os
i = 1
for filename in os.listdir("."):
os.rename(filename, "deutsch_01_" + "%02d" % (i,) + ".xml")
i += 1
Warum werden die Files nicht der Reihe nach gelesen? Bzw. wie kann ich das noch berücksichtigen, dass die Files der Reihe nach eingelesen werden sollen? (Sie sind ja ursprünglich nummeriert)
Re: Benennung von Files
Verfasst: Donnerstag 13. Februar 2014, 23:15
von cofi
Indem du das Ergebnis von `os.listdir` sortierst. `sorted` und sein `key` Argument sind hier das Stichwort.
Wahrscheinlich willst du nach der 2. Zahl als Zahl (nicht String) sortieren, dann kannst du in der `key` Funktion diese Zahl extrahieren und in eine Zahl umwandeln.
Re: Benennung von Files
Verfasst: Donnerstag 13. Februar 2014, 23:22
von BlackJack
@MarcelF6: In welcher Reihenfolge die Namen von `listdir()` kommen ist nicht definiert und dürfte vom Betriebssystem und dort speziell vom Treiber für das Dateisystem abhängen. Wenn Du eine bestimmte Reihenfolge haben möchtest muss Du die Liste entsprechend sortieren. Wenn lexikographisch ausreicht, einfach die `sort()`-Methode aufrufen. Ansonsten muss man eine Funktion schreiben die aus einem Element der Liste einen Sortierschlüssel erstellt und die als `key`-Argument bei `sort()` übergeben.
Die fortlaufende Nummer kann man mit der `enumerate()`-Funktion einfacher erstellen als sie manuell hoch zu zählen.
Wieso machst Du das mit dem Namen so kompliziert? Man kann den Platzhalter doch in *eine* Zeichenkette formatieren, statt da hinterher vorne und hinten noch etwas anzuhängen.
Ungetestet:
Code: Alles auswählen
filenames = os.listdir(os.curdir)
filenames.sort()
for i, filename in enumerate(filenames, 1):
os.rename(filename, 'deutsch_01_{0:02d}.xml'.format(i))
Re: Benennung von Files
Verfasst: Freitag 14. Februar 2014, 09:46
von MarcelF6
Vielen Dank für die kompetente Auskunft!
Ich habe sowieso gerade etwas festgestellt...die Filenames sind leider ziemlich willkürlich gewählt.
Es handelt sich aber immer um xml-Files, welche einen Tag "title" haben. Die Struktur der Files sieht so aus:
Code: Alles auswählen
<article>
<otherTags>
</otherTags>
<title>editorial</title>
</article>
Ich kenne die Reihenfolge der "title"-Tags, d.h.:
1.) Editorial
2.) Content
3.) Club
usw.
Gibt es eine Möglichkeit (wie), die XML-Files durchzugehen, sie entsprechend zu ordnen und ihnen dann den "korrekten" Namen zu geben, d.h. "deutsch_01_01.xml" für das xml-File mit dem Title "editorial", "deutsch_01_02.xml" für das File mit dem Title "content" usw.?
Ganz herzlichen Dank für die Hilfe!

Re: Benennung von Files
Verfasst: Freitag 14. Februar 2014, 10:13
von /me
MarcelF6 hat geschrieben:Gibt es eine Möglichkeit (wie), die XML-Files durchzugehen, sie entsprechend zu ordnen und ihnen dann den "korrekten" Namen zu geben, d.h. "deutsch_01_01.xml" für das xml-File mit dem Title "editorial", "deutsch_01_02.xml" für das File mit dem Title "content" usw.?
Ja. Die Möglichkeit gibt es. Welches Wissen fehlt dir denn konkret dafür?
Es ist ja jetzt nichts dramatisches. Passende Datenstruktur wählen, Informationen aus den Dateien mit einem XML-Parser auslesen, benötigte Daten in die Datenstruktur packen, Jeden Eintrag in eine Liste werfen, Liste sortieren. Dann sortierte Liste abarbeiten.