Umlaute durch Stringopreation verändert

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Hi,
Ich möchte eine Dateistruktur in der die Datei- / Ordnernamen nicht in einem einheitlichem Zeichensatz vorliegen ändern, dass alles einem Zeichensatz (iso8859-15) entspricht.
Dazu habe ich schon ein Tool gefunden convmv. Mein Problem ist nun dass leider nicht alle Änderungsvorschläge von convmv richtig sind.

Jetzt kommt Python ins Spiel. Mit convmv kann ich eine Datei erzeugen die wie folgt aufgebaut ist:

Code: Alles auswählen

 mv "pfad/alterDateiname" "pfad/neuerDateiname"
Ich möchte daraus nun ein "Frage / Antwortspiel" für die Shell machen.
Mein Script soll mir den aktuellen Dateinamen und darunter den neuen Dateinamen ausgeben. Damit ich dann entscheiden kann, ob noch Änderungen am neuen Dateinamen vorgenommen werden müssen, oder ob die Änderungen so übernommen werden können.

Bisher hebe ich:

Code: Alles auswählen

#!/usr/bin/env python 
# -*- coding: iso8859-15 -*-

import sys, os, string

Eingabe_Datei = file('/home/sabba/mnt/daten-alle/umlauts.txt', 'r')
for Zeile in Eingabe_Datei: 
	print Zeile.replace('\n','')
	eintrag = Zeile.split('"	"/')
	links = eintrag[0].replace('mv "','')
	pfad,alt = os.path.split(links)
	weg,neu = os.path.split(links)
	print 'pfad ', pfad
	print 'alt ', alt
	print 'neu', neu
Eingabe_Datei.close()
Das Problem ist nun, wie im folgenden Beispiel zu sehen, dass auch vorher richtige Änderungsvorschläge durch mein Script wieder zu Nichte gemacht werden. (Abgründe -> Abgrnde)

Code: Alles auswählen

mv "Insignium/02. In die Abgrnde" "/Insignium/02. In die Abgründe"
pfad /Insignium
alt 02. In die Abgrnde
neu 02. In die Abgrnde
Hat jemand eine Idee?

cu sebastian
BlackJack

Mr_Snede hat geschrieben:

Code: Alles auswählen

#!/usr/bin/env python 
# -*- coding: iso8859-15 -*-

import sys, os, string

Eingabe_Datei = file('/home/sabba/mnt/daten-alle/umlauts.txt', 'r')
for Zeile in Eingabe_Datei: 
	print Zeile.replace('\n','')
	eintrag = Zeile.split('"	"/')
	links = eintrag[0].replace('mv "','')
	pfad,alt = os.path.split(links)
	weg,neu = os.path.split(links)
	print 'pfad ', pfad
	print 'alt ', alt
	print 'neu', neu
Eingabe_Datei.close()
Das Problem ist nun, wie im folgenden Beispiel zu sehen, dass auch vorher richtige Änderungsvorschläge durch mein Script wieder zu Nichte gemacht werden.
Das Hauptproblem ist, das sowohl `alt` als auch `neu` gleich sind, nämlich den alten Eintrag enthalten wenn ich das richtig sehe. Was nicht weiter verwunderlich ist, weil beide das Ergebnis des gleichen Funktionsaufrufs zugewiesen bekommen.
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Du glaubst ja nicht, wie peinlich mir das ist.
mit

Code: Alles auswählen

for Zeile in Eingabe_Datei:
    print Zeile.replace('\n','')
    eintrag = Zeile.split('"	"/')
    links = eintrag[0].replace('mv "','')
    rechts = eintrag[1]
    pfad,links_split = os.path.split(links)
    weg,rechts_split = os.path.split(rechts)  
    print 'pfad    ', pfad
    print 'alt       ', links_split
    print 'rechts', rechts_split

funktioniert es nun. Ich habe das Umlauteproblem auf dem Server mittlerweile (von Hand) gelöst.

Herzlichen Dank BlackJack.

cu Sebastian
Antworten