textdatei fortsetzen will nicht so recht....

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
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Donnerstag 14. April 2005, 13:54

... und das, obwohl ich die Datei im 'append'-modus öffne, und an jede Zeile \n anhänge. Im ersten Durchgang ist alles gut, aber wenn ich die nächste CD archivieren will, werden die neuen Daten nicht ans Ende der Datei geschrieben, sondern irgendwo kurz vor schluss, d.h. andere Daten werden überschrieben :x

Ich finde den Fehler nicht:

Code: Alles auswählen

def archive():
    cd_drive = raw_input("CD-Laufwerk: ")
    cd_name = raw_input("Name der CD: ")
    data = open("cd_archiv.txt","a")
    for paths, dirs, files in os.walk(cd_drive):
        for file in files:
            data.write("%s |%s |%s | \n" % (file, cd_name, paths))
    data.close
    print "Archivierung von %s abgeschlossen!" % cd_name


Will ich statt open() file() verwenden kommt folgendes:
UnboundLocalError: local variable 'file' referenced before assignment

Ich könnte natürlich erst die Datei auslesen, zusammenfügen und dann die alte Datei überschreiben. Aber so sollte es doch auch gehen, oder nich? mawe ich zähl auf Dich! :wink:

thx
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 14. April 2005, 15:19

knekke hat geschrieben:mawe ich zähl auf Dich!
Wieso nicht auf mich? 8)

Geht doch:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-
import os

def archive():
    cd_drive = raw_input("CD-Laufwerk: ")
    cd_name = raw_input("Name der CD: ")
    data = file("cd_archiv.txt", "a")
    for paths, dirs, files in os.walk(cd_drive):
        for fil in files:
            data.write("%s |%s |%s | \n" % (fil, cd_name, paths))
    data.close()
    print "Archivierung von %s abgeschlossen!" % cd_name 
    
if __name__ == '__main__': 
    archive()
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Donnerstag 14. April 2005, 16:21

Wieso nicht auf mich? Cool
Du stehst ab sofort auch auf meiner Liste :lol:

file() funktioniert jetzt (ich sollte mich nach einem anderen Editor umschauen... Kate hat file nicht gehighlighted, deshalb hatte ich es noch als variable verbraten...)
Aber das Problem besteht nachwievor :cry:

Hier mal ein Auszug aus der generierten Datei:

Code: Alles auswählen

1922-Nosferatu.jpg |CD_001 |/mnt/projects/Delis/Thomas/pics | 
MagazineDraculaClassic.jpg |CD_001 |/mnt/projects/Delis/Thomas/pics | 
IMG_0001.JPG |CD_001 |/mnt/projects/Delis/Thomas/pics | 
._IMG_0001.JPG |CD_00Spiegelbrechnung.xls |CD_002 |/mnt/projects/Delis/Uli |   #Hier ist der Hund begraben... oder wie sacht man??
pingpong.swf |CD_002 |/mnt/projects/Delis/Uli | 
.DS_Store |CD_002 |/mnt/projects/Delis/Uli | 
noch ne Idee?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 14. April 2005, 16:45

Geht das bei dir?

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*-

f = file('app.end', 'a')
for i in range(9):
    f.write('asdfghjkl' + str(i) + '\n')
f.close()
Bei mir geht mein Programm (das aus dem letzten Post) wunderbar, sowohl unter Linux als auch unter Windows (mangels CD-ROM Laufwerks unter Linux habe ich home und /usr/local/bin gescannt). Kann es sein, dass es irgendwelche Interferenzen mit anderen Teilen deines Programms gibt (was ich mir eher weniger vorstellen kann)?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Donnerstag 14. April 2005, 20:56

...hmmm, bei mir zuhause funktioneren alle der hier geposteten Versionen :?: Das heisst ja aber auch das mein code keinen Fehler hatte :D (ok das mit file hab ich verplant - warum sollte man open nochmal nicht verwenden?)
Muss wohl doch ein Fehler im Rest des skripts sein (kann ich mir zwar gerade nicht erklären - die Datai wird doch nur in diesem Abschnitt berührt :?: ). Hab ich aber gerade nich hier. Also gleich noch schön "Mein neuer Feund" schauen, und dann geh ich das morgen mal an.
danke Leonidas
BlackJack

Donnerstag 14. April 2005, 21:47

Dein erstes Skript hatte auf jeden Fall den Fehler, das Du die Datei nicht geschlossen hast. Man muss die `close` Methode auch aufrufen und nicht nur hinschreiben :wink:
raist1314
User
Beiträge: 52
Registriert: Dienstag 21. September 2004, 06:58
Wohnort: Adelzhausen
Kontaktdaten:

Donnerstag 14. April 2005, 21:47

Und was ist, wenn du manuell mittels seek() an das Ende der Datei springst? Oder macht file das beim Öffnen im Modus 'a' automatisch?

Ich hab folgendes gemacht:

Code: Alles auswählen

fh = file('cd_archiv.txt', 'a')
fh.seek(0,2) # springt zum ende der datei, kannst du mit fh.tell pruefen
fh.write('neu')
fh.close()
War nur so ne Idee, eigentlich sollte dein Prog aber laufen, bei mir hats RuckZuck den Inhalt von /usr/local indiziert (3044 Einträge...).

Sebastian
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 15. April 2005, 12:25

knekke hat geschrieben:ok das mit file hab ich verplant - warum sollte man open nochmal nicht verwenden?
Dies hat BlackJack schon sehr gut erklärt (siehe dieser Post, meinen Kommentar und BlackJacks Erklärung). Kurz: es ist egal was du nutzt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Freitag 15. April 2005, 12:35

Dein erstes Skript hatte auf jeden Fall den Fehler, das Du die Datei nicht geschlossen hast. Man muss die `close` Methode auch aufrufen und nicht nur hinschreiben :wink:
Verdammt :oops: Hab ich doch tatsächlich übersehen, und dabei hatte Leonidas das ja auch schon freundlicherweise korrigiert - was ich natürlich geflissentlich ignoriert habe :roll:
Vielen Dank für Eure Antworten! Das mit seek probier ich erstmal nicht, da der append-modus ja eigentlich vom ende weiterschreiben sollte (was er auch gleich machen wird :lol: )

thx und bis zum nächsten mal
Antworten