undefinierbarer Fehler

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
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Montag 5. Juni 2006, 19:23

Code: Alles auswählen

import zipfile, glob, os
file = zipfile.ZipFile("../../home/murph/meinedateien.zip")
wurzel = "/home/murph/meine_dateien"
def make(wurzel):
    for root, dirs, files in os.walk(wurzel):
        for name in files:
            file,write(name, os.path-basename(name), zipfile.ZIP_DEFLATED)
        for name in dirs:
            wurzel += name
            make(wurzel)
make(wurzel)
file.close()
Die Fehlermeldung:
root@murphs:/etc/init.d# ./archiver.py
Traceback (most recent call last):
File "./archiver.py", line 16, in ?
make(wurzel)
File "./archiver.py", line 12, in make
file.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED)
File "/usr/lib/python2.4/zipfile.py", line 391, in write
st = os.stat(filename)
OSError: [Errno 2] No such file or directory: 'archiver.py~'
Tut mir Leid, aber ich habe keine Ahnung und verstehe nichts.
Nicht einmal eine Grobdiagnose habe ich.
Idee:
Ein Skript, der alle meine eigenen dateien bei jedem systemherunterfahren sichert in ienme zip-archiv
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Montag 5. Juni 2006, 21:18

archiver.py~ sieht nach einer backup Datei aus (linux :roll: )

Das ganze für ich in ein Try + Except tun, dann hast du ruhe ^^

Die Datei existiert evtl. schon nicht mehr
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Montag 5. Juni 2006, 21:24

genau das ist nicht so!
die datei existiert auf jeden fall! der fehler kommt ja, wenn ich die besagte datei ausführe! genau das ist ja das problem! ich führe die datei aus und sie verweist auf eien bakeup ihrer selbst!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 5. Juni 2006, 22:26

Hi murph!

Mit Zipfile arbeite ich nicht mehr, da ich einige Schwierigkeiten damit hatte und damals nicht raus bekommen habe warum.

Deshalb hier eine Variante mit Tarfile:

Code: Alles auswählen

import os
import os.path
import tarfile

SOURCEDIR = "/home/gerold/Desktop"
BASENAME = SOURCEDIR.split("/")[-1]

tar = tarfile.open("sample.tar.gz", "w:gz")

for root, dirs, files in os.walk(SOURCEDIR):
    for filename in files:
        filepath = os.path.join(root, filename)
        virtual_filepath = "/" + BASENAME + filepath[len(SOURCEDIR):]
        print virtual_filepath
        tarinfo = tar.gettarinfo(
            filepath, virtual_filepath
        )
        tar.addfile(tarinfo, file(filepath, "rb")) # Die Datei muss unbedingt binär geöffnet werden.

tar.close()
mfg
Gerold
:-)

Edit by Gerold: Kleinen Fehler im Code ausgebessert.

Stichworte: TAR tar relativ relative Pfad Pfade archivieren
Zuletzt geändert von gerold am Freitag 30. Juni 2006, 17:15, insgesamt 3-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 5. Juni 2006, 22:29

murph hat geschrieben:

Code: Alles auswählen

import zipfile, glob, os
file = zipfile.ZipFile("../../home/murph/meinedateien.zip")
wurzel = "/home/murph/meine_dateien"
def make(wurzel):
    for root, dirs, files in os.walk(wurzel):
        for name in files:
            file,write(name, os.path-basename(name), zipfile.ZIP_DEFLATED)
        for name in dirs:
            wurzel += name
            make(wurzel)
make(wurzel)
file.close()
Hi murph!

Ohne auf den Code weiter einzugehen:
1. Man sollte keine Variable "file" nennen, da damit der Befehl "file" überschrieben wird.
2. Zeile 7: Der Beistrich zwischen "file" und "write" gehört da nicht hin.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Dienstag 6. Juni 2006, 07:43

murph hat geschrieben:Die Fehlermeldung:
root@murphs:/etc/init.d# ./archiver.py
Traceback (most recent call last):
File "./archiver.py", line 16, in ?
make(wurzel)
File "./archiver.py", line 12, in make
file.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED)
File "/usr/lib/python2.4/zipfile.py", line 391, in write
st = os.stat(filename)
OSError: [Errno 2] No such file or directory: 'archiver.py~'
Tut mir Leid, aber ich habe keine Ahnung und verstehe nichts.
Nicht einmal eine Grobdiagnose habe ich.
Na eigentlich steht's doch da: Die Datei `archiver.py~` gibt's nicht, jedenfalls nicht im Verzeichnis wo `walk()` gestartet ist. Die Dateiliste bei `walk()` gibt nur die Dateinamen und keine Pfade dorthin an. Den kompletten Pfad musst Du also noch mit `os.path.join()` aus `root` und dem `name` "zusammenbauen".
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Dienstag 6. Juni 2006, 15:16

ah, habe leider vor lauter bäume den wald nicht mehr gesehen.
natürlich gibt er das als liste aus un muss zusammengebacken werden...
Antworten