tags:

views:

299

answers:

3

Hi, I'm fairly new when it comes to programming, and have started out learning python.

What I want to do is to recolour sprites for a game, and I am given the original colours, followed by what they are to be turned into. Each sprite has between 20 and 60 angles, so looping through each one in the folder for each colour is probably the way to go for me. My code goes thusly;

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)

But I keep getting an error on the pathname, and on pix being a string value (They're all pictures)

Any help appreciated.

+1  A: 

The path is wrong because the backslashes need to be doubled up - backslash is an escape for special characters.

os.listdir does not return open files, it returns filenames. You need to open the file using the filename.

Mark Ransom
+3  A: 

os.listdir() returns a list of file names. Thus, filename is a string. You need to open the file before iterating on it, I guess.

Also, be careful with backslashes in strings. They are mostly used for special escape sequences, so you need to escape them by doubling them. You could use the constant os.sep to be more portable, or even use os.path.join() :

folder = os.path.join('C:\\', 'Users', 'Sprinting', 'blue')
Wookai
A: 
for pix in filename:

iterates over the letters of the filename. So that's certainly not what you want. You'll probably want to replace that line by:

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

(assuming Python 2.6) and indent the rest of the loop accordingly.

However, I'm not sure that the new for loop does what you want unless by pix you mean a line of text in the current file. If the files are binary picture files, you'll first need to read their contents correcty - not enough info in your post to guess what's right here.

Tim Pietzcker