Как сохранить файлы в новую папку с помощью ОС? - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь создать скрипт, который изменяет контраст и резкость всех изображений в папке, и сохранить его в новой папке как filename_edited.jpg

Я использую Pythong 3.7, импортируяОС и ПИЛ. У меня есть папка с некоторыми изображениями - DJI_001.jpg, DJI_002.jpg и так далее. Папка с изображениями называется test.

Папка, в которую я хочу их отправить, называется 'novo' в .. \ test \ novo

Изначально у меня было это. Это работает, но сохраняет изображения в одной папке:

import PIL
from PIL import Image, ImageEnhance
import os.path, sys

path = "C:\\Users\\r o d r i g o\\Desktop\\001 - progamer\\98 - Image brightness\\test" 
dirs = os.listdir(path)


def teste():
    for item in dirs:
        fullpath = os.path.join(path,item)
        if os.path.isfile(fullpath):
            img = Image.open(fullpath) 
            f, e = os.path.splitext(fullpath) 
            sharpness = ImageEnhance.Sharpness(img) 
            sharp = sharpness.enhance(10.0)
            newimg = sharp
            contrast = ImageEnhance.Contrast(newimg)
            cont = contrast.enhance(2.3)
            head, tail = os.path.split(fullpath)
            cont.save(f + "_edited.jpg")

teste()

Так что после некоторых исследований я попытался разделить полный путь в голове и хвосте. Хвостовая переменная возвращает мне имя файла.

Я делал это так, что каждый раз, когда он зацикливался, он мог сохранить путь к файлу моей новой папки + tail.

Итак, я попробовал это:

def sha():
    for item in dirs:
        fullpath = os.path.join(path,item)
        if os.path.isfile(fullpath):
            img = Image.open(fullpath) 
            #f, e = os.path.splitext(fullpath) #don't need this here
            sharpness = ImageEnhance.Sharpness(img) 
            sharp = sharpness.enhance(10.0)
            newimg = sharp
            contrast = ImageEnhance.Contrast(newimg)
            cont = contrast.enhance(2.3)
            head, tail = os.path.split(fullpath)
            cont.save("C:\\Users\\r o d r i g o\\Desktop\\001 - progamer\\98 - Image brightness\\test\\novo" + tail)
            print("this is the filepath: " + head)
            print("this is the filename: " + tail)

sha()

Я думал, что это будет работать, но он сохраняет файлы в том же каталоге, что и novoDJI_001.jpg, novoDJI_002.jpg и т. Д.

Я добавил пару изображений, если это поможет:

Сохранение в той же папке и Попытка сохранения в новой папке

Итак, со второй попытки (больше похоже на 20-ую, но хорошо), как вы можете видеть, я инертировал путь к файлу, но новая папка с именем novo в \ test \ novo оказалась в имени файла.

Любая помощьочень признателен, я уверен, что это просто, но я потратил последние 5 часов на это, но я не могу понять, почему это происходит! Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2019

В этой строке нет разделителя пути между "novo" и tail:

cont.save("C:\\Users\\r o d r i g o\\Desktop\\001 - progamer\\98 - Image brightness\\test\\novo" + tail)

Пожалуйста, замените его на что-то вроде этого:

cont.save("C:\\Users\\r o d r i g o\\Desktop\\001 - progamer\\98 - Image brightness\\test\\novo\\" + tail)    // '\\' added after 'novo'

или вы можете использоватьэто также:

new_name = os.path.join( head, "novo", tail )
cont.save( new_name )
...