2009-11-24 14 views
32

Sono abbastanza nuovo quando si tratta di programmazione e ho iniziato a imparare Python.Looping di file in una cartella

Quello che voglio fare è ricoltivare gli sprite per un gioco, e mi vengono dati i colori originali, seguiti da quello in cui devono essere trasformati. Ogni sprite ha tra 20 e 60 angoli, quindi scorrendo attraverso ognuno nella cartella per ogni colore è probabilmente la strada da percorrere per me. Il mio codice va così;

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) 

Ma io continuo a ricevere un errore sul percorso, e su pix essere un valore stringa (sono tutte le foto)

Qualsiasi aiuto apprezzato.

+0

Puoi mostrare il messaggio di errore specifico che stai ricevendo? – perimosocordiae

+0

È un compito scolastico? Tutti i risultati di ricerca che ottengo da Google sul tuo modulo "media" sembrano indicare che è ... –

risposta

3

Il percorso è sbagliato, perché le barre inverse devono essere raddoppiate fino - backslash è una via di fuga per i caratteri speciali.

os.listdir non restituisce i file aperti, restituisce i nomi dei file. Devi aprire il file usando il nome del file.

34

os.listdir() restituisce una lista di nomi di file. Pertanto, filename è una stringa. Devi aprire il file prima di iterarlo, suppongo.

Inoltre, fare attenzione con backslash nelle stringhe. Vengono principalmente utilizzati per sequenze di escape speciali, quindi è necessario sfuggirli raddoppiandoli. Si potrebbe utilizzare la costante os.sep di essere più portatile, o anche utilizzare os.path.join():

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

itera sopra le lettere del nome del file. Quindi non è certamente quello che vuoi. Probabilmente si vorrà sostituire quella linea da:

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

(supponendo che Python 2.6) e rientrare il resto del ciclo di conseguenza.

Tuttavia, non sono sicuro che il nuovo ciclo for fa ciò che si vuole se non per pix si intende una riga di testo nel file corrente. Se i file sono file di immagini binari, devi prima leggerli correttamente, non abbastanza informazioni nel tuo post per indovinare cosa c'è qui.