Seite 1 von 1

Was mach ich falsch?? löschen von Dateien!!

Verfasst: Dienstag 28. Juli 2015, 23:09
von pythonnewbie79
ich möchte Dateien löschen und hab mir ein code gebastelt, aber bekomme folgende Fehlermeldung,

Traceback (most recent call last):
File "C:/Python34/loeschen_test.py", line 9, in <module>
shutil.rmtree(root+'/'+dat)
File "C:\Python34\lib\shutil.py", line 478, in rmtree
return _rmtree_unsafe(path, onerror)
File "C:\Python34\lib\shutil.py", line 360, in _rmtree_unsafe
onerror(os.listdir, path, sys.exc_info())
File "C:\Python34\lib\shutil.py", line 358, in _rmtree_unsafe
names = os.listdir(path)
NotADirectoryError: [WinError 267] Der Verzeichnisname ist ungültig: 'C:/Projekte Gesperrt/Auto/eingabe.txt'

kann mir jemand erklären was ich falsch mache?

Code: Alles auswählen

import os,shutil
from datetime import datetime, timedelta
verz='C:/Projekte Gesperrt/'
day5 = datetime.now()-timedelta(days=5)
for root,dirs,files in os.walk(verz):
    for dat in files:
        last_mod = datetime.fromtimestamp(os.path.getmtime(root+'/'+dat))
        if last_mod < day5:
            shutil.rmtree(root+'/'+dat)

Re: Was mach ich falsch?? löschen von Dateien!!

Verfasst: Dienstag 28. Juli 2015, 23:21
von BlackJack
@pythonnewbie79: Du benutzt die falsche Funktion. Du willst *Dateien* löschen, und verwendest eine Funktion zum löschen von *Verzeichnissen*, die sich beschwert das sie einen Dateinamen als Argument bekommt und keinen Verzeichnisnamen.

Edit: Zum Verbinden von Pfadteilen sollte man `os.path.join()` verwenden und keine Zeichenkettenoperationen. Ausserdem wird da zweimal der gleiche Gesamtpfad erstellt — das würde ich nur *einmal* machen.

Re: Was mach ich falsch?? löschen von Dateien!!

Verfasst: Dienstag 28. Juli 2015, 23:54
von pythonnewbie79
BlackJack hat geschrieben:@pythonnewbie79: Du benutzt die falsche Funktion. Du willst *Dateien* löschen, und verwendest eine Funktion zum löschen von *Verzeichnissen*, die sich beschwert das sie einen Dateinamen als Argument bekommt und keinen Verzeichnisnamen.

Edit: Zum Verbinden von Pfadteilen sollte man `os.path.join()` verwenden und keine Zeichenkettenoperationen. Ausserdem wird da zweimal der gleiche Gesamtpfad erstellt — das würde ich nur *einmal* machen.

joopp os.remove(root+'/'+dat) ist das richtige

BlackJack wie hättest du diese aufgabe gelöst??

Re: Was mach ich falsch?? löschen von Dateien!!

Verfasst: Mittwoch 29. Juli 2015, 07:11
von Sirius3
So zum Beispiel:

Code: Alles auswählen

import os
from itertools import ifilter
from functools import partial
from datetime import datetime, timedelta

def walk_files(root):
    for path, _, filenames in os.walk(root):
        for filename in filenames:
            yield os.path.join(path, filename)

def is_older_than(date, filename):
    return datetime.fromtimestamp(os.path.getmtime(filename)) < date

def main():
    root = 'C:/Projekte Gesperrt'
    removal_date = datetime.now() - timedelta(days=5)
    for filename in ifilter(partial(is_older_than, removal_date), walk_files(root)):
        os.unlink(filename)

if __name__ == '__main__':
    main()