Pertanyaan Looping melalui file dalam folder


Saya cukup baru ketika datang ke pemrograman, dan sudah mulai belajar python.

Yang ingin saya lakukan adalah memurnikan sprite untuk game, dan saya diberi warna asli, diikuti oleh apa yang akan mereka ubah. Setiap sprite memiliki antara 20 dan 60 sudut, jadi perulangan melalui masing-masing di folder untuk setiap warna mungkin cara untuk pergi untukku. Kode saya berjalan dengan sendirinya;

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)

Tapi saya terus mendapatkan kesalahan pada pathname, dan pada pix menjadi nilai string (Mereka semua gambar)

Setiap bantuan dihargai.


32
2017-11-24 19:19


asal


Jawaban:


os.listdir () mengembalikan daftar nama file. Demikian, filename adalah sebuah string. Anda perlu membuka file sebelum iterasi di atasnya, saya kira.

Juga, hati-hati dengan backslash dalam string. Mereka sebagian besar digunakan untuk urutan pelarian khusus, jadi Anda harus menghindarinya dengan menggandakannya. Anda bisa menggunakan konstanta os.sep menjadi lebih portabel, atau bahkan digunakan os.path.join() :

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

34
2017-11-24 19:24



for pix in filename:

mengulangi huruf-huruf nama file. Jadi itu jelas bukan yang Anda inginkan. Anda mungkin ingin mengganti baris itu dengan:

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

(dengan asumsi Python 2.6) dan indent sisa loop yang sesuai.

Namun, saya tidak yakin yang baru for loop melakukan apa yang Anda inginkan kecuali oleh pix maksud Anda baris teks dalam file saat ini. Jika file adalah file gambar biner, pertama-tama Anda harus membaca isinya secara benar - tidak cukup info di posting Anda untuk menebak apa yang ada di sini.


10
2017-11-24 19:28



Path salah karena backslash perlu digandakan - backslash adalah pelarian untuk karakter khusus.

os.listdir tidak mengembalikan file terbuka, ia mengembalikan nama file. Anda perlu membuka file menggunakan nama file.


3
2017-11-24 19:24