Ich habe eine Reihe von JPGs in einem Ordner (Bilder), die ich in einen anderen Ordner (Zielordner) kopieren möchte. Wenn sie kopiert werden, sollen die JPG-Dateien wie folgt umbenannt werden: Dateiname1_red.jpg, Dateiname2_red.jpg (d. H. Hinzufügen des Suffixes _red am Ende)

Ich habe bisher folgendes:

import os
images = os.listdir('C:/Users/Admin-dsc/Documents/.../buses and motorcycles')
destination_folder = 'C:/Users/Admin-dsc/Documents/.../Buses'

for img in images: 
    filename = os.path.basename(img)
    copyfile(img, os.path.join(destination_folder, filename))

Frage 1: Ich erhalte diesen Fehler, den ich nicht verstehe - wie kann ich ihn beheben:

FileNotFoundError: [Errno 2] No such file or directory: 'RWG074059_2_o.jpg'

Frage 2: Ich bin mir nicht sicher, wie ich das Suffix bekommen soll.

Kann jemand helfen?

0
JassiL 18 Jän. 2019 im 16:50

3 Antworten

Beste Antwort

os.listdir gibt nur die Dateinamen des zurück Dateien im angegebenen Ordner wird nicht der vollständige Pfad zur Datei zurückgegeben. Sie müssen also den Pfad des Quellordners mit img verbinden:

import os
from shutil import copyfile

source_folder = 'C:/Users/Admin-dsc/Documents/.../buses and motorcycles'
destination_folder = 'C:/Users/Admin-dsc/Documents/.../Buses'
images = os.listdir(source_folder)

for img in images:
    filename, ext = os.path.splitext(img)
    filename = filename + '_red' + ext
    copyfile(os.path.join(source_folder, img), os.path.join(destination_folder, filename))
1
Muhammad Ahmad 18 Jän. 2019 im 14:09

img enthält nur den Namen des Bildes, nicht die vollständigen Pfadinformationen.

Erstellen Sie stattdessen einen absoluten Pfad, wenn Sie das Quellbild angeben:

import os
source_folder = 'C:/Users/Admin-dsc/Documents/.../buses and motorcycles'
images = os.listdir(source_folder)
destination_folder = 'C:/Users/Admin-dsc/Documents/.../Buses'

for img in images: 
    filename = os.path.basename(img)
    copyfile(os.path.join(source_folder, img), os.path.join(destination_folder, filename))
0
Mike Scotty 18 Jän. 2019 im 14:00

So debuggen Sie diesen Fehler:

import os

directory = 'C:/Users/Admin-dsc/Documents/.../buses and motorcycles'
images = os.listdir(directory) 

for img in images: 
    print(img)
    filename = os.path.basename(img)
    print(filename)

Ausgabe:

main.py
main.py

Was Sie sehen können:

Sie sehen, dass listdir() nur Dateinamen zurückgibt. Sie müssen den Quellordner erneut voranstellen.

So beheben Sie:

import os

directory = './'
destination_folder = 'C:/Users/Admin-dsc/Documents/.../Buses'
images = os.listdir(directory) 

for img in images: 
    print(img)
    filename = os.path.basename(img)
    print(filename)

    # prepend path again
    source = os.path.join(directory,img)
    target = os.path.join(destination_folder,img)

    print(source, "=>",  target)

    # copyfile(source, target)  

Ausgabe:

 ./main.py => C:/Users/Admin-dsc/Documents/.../Buses/main.py
1
Patrick Artner 18 Jän. 2019 im 14:06