Seite 1 von 1

Problem bei Python file-sorter

Verfasst: Donnerstag 17. Dezember 2020, 16:44
von SignoreFormaggi
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

Re: Problem bei Python file-sorter

Verfasst: Donnerstag 17. Dezember 2020, 17:13
von Sirius3
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()

Re: Problem bei Python file-sorter

Verfasst: Freitag 18. Dezember 2020, 09:53
von DeaD_EyE
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.