Зацикливание файлов в папке
Я новичок в программировании и начал изучать 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 - строковое значение (все они - картинки)
Любая помощь была оценена.
Ответы
Ответ 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
не возвращает открытые файлы, он возвращает имена файлов. Вам нужно открыть файл, используя имя файла.