Seite 1 von 1

undefinierbarer Fehler

Verfasst: Montag 5. Juni 2006, 19:23
von murph

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

Verfasst: Montag 5. Juni 2006, 21:18
von DatenMetzgerX
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

Verfasst: Montag 5. Juni 2006, 21:24
von murph
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!

Verfasst: Montag 5. Juni 2006, 22:26
von gerold
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

Re: undefinierbarer Fehler

Verfasst: Montag 5. Juni 2006, 22:29
von gerold
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
:-)

Re: undefinierbarer Fehler

Verfasst: Dienstag 6. Juni 2006, 07:43
von BlackJack
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".

Verfasst: Dienstag 6. Juni 2006, 15:16
von murph
ah, habe leider vor lauter bäume den wald nicht mehr gesehen.
natürlich gibt er das als liste aus un muss zusammengebacken werden...