Hallo,
ich habe ein recht umfangreiches Python-Skript, was aber sehr simpel aufgebaut ist. Folgender try-except-Block wird wiederholt, um eine große Menge Dateien umzubenennen:
try:
os.rename("blabla.ext", "blablabla.ext")
except WindowsError:
print "Datei nicht vorhanden"
Das Skript hat 71.110 Zeilen und wird ohne Fehlermeldung einfach nicht ausgeführt (Der Prompt im cmd-Fenster - Windows XP - erscheint wieder und nicht ist passiert). Bei nur 5 try-except-Blöcken funktioniert es einwandfrei.
Was mache ich also bei einem so großen Skript? Kann ich irgendwie mehr Speicher allozieren oder gibt es eine andere Lösung?
Übrigens habe ich Python 2.5.
Vielen Dank schonmal für Eure Hilfe!!!
umfangreiches Skript
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Entschuldige, aber mit den Angaben kann man dir nicht helfen. So wies aussieht, startest du das Skript per Doppelklick? Wenn ja, fuehre es mal auf der Kommandozeile aus, dann solltest du den Traceback auch sehen, wenn es denn einen gibt.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Ich starte das Skript per Kommandozeile. Es gibt keinen Traceback, sondern es erscheint einfach wieder ein Prompt, so wie nach einem korrekt ausgeführten Skript. Leider wurde aber keine einzige Umbenennung vorgenommen.
Hallo und willkommen im Forum,
Du schreibst Skripte mit 71-Tausend Zeilen??? Meine Güte, das ist kein Skript mehr, das ist eine riesige Software(bibliothek?)!
Ansonsten: Wie kommst Du darauf, dass Du mehr Speicher brauchst? Fängt der Rechner an zu swappen (bzw. auf Windows: in die "Auslagerungsdatei" zu schreiben)? Mit den gemachten Angaben kann man nur raten, aber ich würde raten: Dein Skript braucht dringend ein Refactoring.
Und: Mit so wenig Code und der Aussage "wird ohne Fehlermeldung einfach nicht ausgeführt", kann man wenig dazu sagen. So viel kann man hier nicht posten, aber kannst Du ein Minimalbeispiel posten? Ggf. auch in einem Pastebin? Ein Minimalbeispiel wäre ohnehin ein guter erster Schritt den Fehler zu identifizieren. (Kommt das Skript z.B. überhaupt an der fraglichen Stelle an?)
Gruß,
Christian
Du schreibst Skripte mit 71-Tausend Zeilen??? Meine Güte, das ist kein Skript mehr, das ist eine riesige Software(bibliothek?)!
Ansonsten: Wie kommst Du darauf, dass Du mehr Speicher brauchst? Fängt der Rechner an zu swappen (bzw. auf Windows: in die "Auslagerungsdatei" zu schreiben)? Mit den gemachten Angaben kann man nur raten, aber ich würde raten: Dein Skript braucht dringend ein Refactoring.
Und: Mit so wenig Code und der Aussage "wird ohne Fehlermeldung einfach nicht ausgeführt", kann man wenig dazu sagen. So viel kann man hier nicht posten, aber kannst Du ein Minimalbeispiel posten? Ggf. auch in einem Pastebin? Ein Minimalbeispiel wäre ohnehin ein guter erster Schritt den Fehler zu identifizieren. (Kommt das Skript z.B. überhaupt an der fraglichen Stelle an?)
Gruß,
Christian
17777 Dateien mit 17777 aneinandergereihten 4-Zeilern umbenennen zu wollen ist kein "umfangreiches Skript" sondern Wahnsinn - IMHO.
Ich könnte mir vorstellen, dass die 71110 Zeilen irgendwie Pythons Grenzen sprengen, was Bytecode angeht. Ich würde vorschlagen, die Datei in 4 Teile mit je 4444 Umbenenn-Operationen zu zerteilen und es dann noch mal zu versuchen.
Geht das immer noch nicht, ganz am Anfang "import pdb; pdb.set_trace()" eingeben und debuggen, wo das ganze abbricht. Mehr gibt meine Kristallkugel nicht her.
Stefan
Ich könnte mir vorstellen, dass die 71110 Zeilen irgendwie Pythons Grenzen sprengen, was Bytecode angeht. Ich würde vorschlagen, die Datei in 4 Teile mit je 4444 Umbenenn-Operationen zu zerteilen und es dann noch mal zu versuchen.
Geht das immer noch nicht, ganz am Anfang "import pdb; pdb.set_trace()" eingeben und debuggen, wo das ganze abbricht. Mehr gibt meine Kristallkugel nicht her.
Stefan
Erstmal vielen Dank.
@sma: aufsplitten hatte ich schon probiert - ohne Erfolg
@cm: mein Bsp. war schon ein Minimalbeispiel, weil es nur solche try-except-blöcke gab und nichts weiter.
@bankkind: Danke! Der Tipp liegt auf der Hand, aber das war genau das, was ich brauchte. Die Liste mit den Dateinamen gab es ja schon.
Mein neues, funktionierendes Skript:
@sma: aufsplitten hatte ich schon probiert - ohne Erfolg
@cm: mein Bsp. war schon ein Minimalbeispiel, weil es nur solche try-except-blöcke gab und nichts weiter.
@bankkind: Danke! Der Tipp liegt auf der Hand, aber das war genau das, was ich brauchte. Die Liste mit den Dateinamen gab es ja schon.
Mein neues, funktionierendes Skript:
Code: Alles auswählen
import re,sys,os,os.path,string
input = open("dateinamenliste.txt", "r")
for line in input.xreadlines():
filename = line.rstrip('\n')
print filename
newname = "nichtbas"+filename
print newname
try:
os.rename(filename, newname)
except WindowsError:
print "Datei nicht vorhanden"
input.close()
Warum dann nicht
Stefan
Code: Alles auswählen
with open("dateinamenliste.txt") as liste:
for name in liste:
if os.path.exists(name):
os.rename(name, "nichtbas" + name)
else:
print name, "nicht vorhanden"
@sma: Die Zeilenumbrüche müssen entfernt werden, außerdem sollte man lieber Ausnahmen abfangen anstatt vorneweg zu testen:
Code: Alles auswählen
with open('namesliste.txt') as stream:
for line in stream:
name = line.rstrip('\n')
new_name('nichtbas' + name)
print('{0} -> {1}'.format(name, new_name)
try:
os.rename(name, new_name)
except EnvironmentError as error:
print(error)
Oh, SO ist das aufzufassen?sma hat geschrieben:17777 Dateien mit 17777 aneinandergereihten 4-Zeilern umbenennen zu wollen ist kein "umfangreiches Skript" sondern Wahnsinn - IMHO.