Problem bei Python file-sorter

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
SignoreFormaggi
User
Beiträge: 1
Registriert: Dienstag 15. Dezember 2020, 20:58

Hallo liebe Community,
bin grad dran einen automatischen file-sorter zu programmieren... er soll Dateien in meinem Download-Ordner anhand ihrer Endungen in Unterordner sortieren.

Aus irgendeinem Grund funktioniert es nicht mehr und ich bekomme immer den Fehler: FileNotFoundError: [Errno 2] No such file or directory: '....' .

Komischerweise hat es bis vorhin noch funktioniert und ich weiß nicht was ich plötzlich falsch mache.
Könnte mir hierzu vielleicht jemand helfen?

Danke ^^

Code: Alles auswählen

import os
from os import listdir
from os.path import isfile, join
import shutil

file_list = os.listdir('C:\\Users\ham\downloads')

image_files = ['.jpeg', '.jpg', '.png', '.PNG', '.gif', '.psd', '.ai']
doc_files = ['.doc', '.docx', '.docm', 'dotx', '.xls', '.xlsx', '.xlsm', '.ppt', '.pptx', '.pdf', '.PDF']
vid_sound_files = ['.mp4', '.mov', '.avi', '.mp3', '.wav', '.m4a', '.flac']
application_files = ['.lnk', '.exe', '.msi', '.zip']

for src in file_list:
    dst = ''
    for ext in image_files:
        if not os.path.exists('C:\\Users\ham\downloads\Bilder'):
            os.makedirs('C:\\Users\ham\downloads\Bilder')
        if src.endswith(ext):
            dst = 'C:\\Users\ham\downloads\Bilder'
            shutil.move(src, dst)
            break
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

os.listdir liefert nur Dateinamen, nicht den kompletten Pfad. Daher sollte man die Funktionen aus os auch nicht mehr verwenden, sondern pathlib.Path
Die for-Schleife nur um die Extensions zu prüfen, ist überflüssig, da endswith auch mit Tupeln funktioniert, aber die Dateiendung sollte sowieso per pathlib.Path.suffix ermittelt werden.
dst auf einen leeren String zu setzen ist überflüssig, da der Wert eh nicht verwendet wird.
Konstanten schreibt man komplett GROSS.

Code: Alles auswählen

import shutil
from pathlib import Path

IMAGE_FILES = ['.jpeg', '.jpg', '.png', '.PNG', '.gif', '.psd', '.ai']
DOC_FILES = ['.doc', '.docx', '.docm', 'dotx', '.xls', '.xlsx', '.xlsm', '.ppt', '.pptx', '.pdf', '.PDF']
VIDEO_FILES = ['.mp4', '.mov', '.avi', '.mp3', '.wav', '.m4a', '.flac']
APPLICATION_FILES = ['.lnk', '.exe', '.msi', '.zip']

DOWNLOADS = Path.home() / 'downloads'
IMAGE_PATH = DOWNLOADS / 'Bilder'

def main():
    for path in DOWNLOADS.iterdir():
        if path.suffix in IMAGE_FILES:
            IMAGE_PATH.mkdir(exist_ok=True)
            shutil.move(str(src), str(IMAGE_PATH / src.name)) # Ab Python 3.9 str ist nicht mehr nötig.

if __name__ == '__main__':
    main()
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Sirius3 hat geschrieben: Donnerstag 17. Dezember 2020, 17:13 Die for-Schleife nur um die Extensions zu prüfen, ist überflüssig, da endswith auch mit Tupeln funktioniert, aber die Dateiendung sollte sowieso per pathlib.Path.suffix ermittelt werden.
Oh, stimmt ja :o
https://docs.python.org/3/library/stdty ... r.endswith
Geht aber nur mit einer Tuple, eine Liste oder andere iterables kann man nicht übergeben. Mag wohl dem geschuldet sein, das str auch eine Sequenz ist.
So als Auffrischung lohnt es sich auf jeden Fall immer mal wieder in die Dokumentation zu gucken.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten