Подтвердить что ты не робот

Зацикливание файлов в папке

Я новичок в программировании и начал изучать python.

Что я хочу сделать, это перекрасить спрайты для игры, и мне дают оригинальные цвета, после чего они должны быть превращены в. Каждый спрайт имеет от 20 до 60 углов, поэтому прохождение через каждый из них в папке для каждого цвета - это, вероятно, путь для меня. Мой код идет таким образом;

import media
import sys
import os.path

original_colors = str(raw_input('Please enter the original RGB component, separated ONLY by a single space: '))
new_colors = str(raw_input('Please insert the new RGB component, separated ONLY by a single space: '))
original_list = original_colors.split(' ')
new_list = new_colors.split(' ')
folder = 'C:\Users\Spriting\blue'
if original_colors == 'quit' or new_colors == 'quit':
    sys.exit(0)
else:
    while 1:
        for filename in os.listdir (folder):
            for pix in filename:
                if (media.get_red(pix) == int(original_list[0])) and (media.get_green(pix) == int(original_list[1])) and \
                   (media.get_blue(pix) == int(original_list[2])):
                    media.set_red(pix, new_list[0])
                    media.set_green(pix, new_list[1])
                    media.set_blue(pix, new_list[2])

                    media.save(pic)

Но я продолжаю получать ошибку на пути, а на pix - строковое значение (все они - картинки)

Любая помощь была оценена.

4b9b3361

Ответ 1

os.listdir() возвращает список имен файлов. Таким образом, filename является строкой. Думаю, вам нужно открыть файл перед его итерацией.

Кроме того, будьте осторожны с обратными косыми чертами в строках. Они в основном используются для специальных escape-последовательностей, поэтому вам нужно избегать их, удваивая их. Вы можете использовать константу os.sep более переносимой или даже использовать os.path.join():

folder = os.path.join('C:\\', 'Users', 'Sprinting', 'blue')

Ответ 2

for pix in filename:

выполняет итерацию над буквами имени файла. Так что, конечно, не то, что вы хотите. Вероятно, вы захотите заменить эту строку на:

with open(filename) as current_file:
    for pix in current_file:

(при условии, что Python 2.6) и отступ остальной части цикла соответственно.

Однако я не уверен, что новый цикл for делает то, что вы хотите, если только pix вы не понимаете строку текста в текущем файле. Если файлы являются бинарными файлами изображений, вам сначала нужно будет прочитать их содержимое правильно - недостаточно информации в вашем сообщении, чтобы угадать, что здесь.

Ответ 3

Путь неверен, потому что обратные косые черты нужно удвоить - обратная косая черта - это escape для специальных символов.

os.listdir не возвращает открытые файлы, он возвращает имена файлов. Вам нужно открыть файл, используя имя файла.