プログラミングに関してはかなり新しく、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でエラーを取得し続けます(すべての写真です)
任意の助けに感謝します。
os.listdir() は、ファイル名のリストを返します。したがって、filename
は文字列です。繰り返し処理する前にファイルを開く必要があると思います。
また、文字列のバックスラッシュに注意してください。これらは主に特別なエスケープシーケンスに使用されるため、2倍にしてエスケープする必要があります。移植性を高めるために定数_os.sep
_を使用するか、またはos.path.join()
を使用することもできます。
_folder = os.path.join('C:\\', 'Users', 'Sprinting', 'blue')
_
for pix in filename:
ファイル名の文字を反復処理します。それは確かにあなたが望むものではありません。その行を次のように置き換えたいと思うでしょう。
with open(filename) as current_file:
for pix in current_file:
(Python 2.6)と仮定し、それに応じてループの残りをインデントします。
ただし、for
によって現在のファイル内のテキスト行を意味する場合を除き、新しいpix
ループが目的どおりに動作するかどうかはわかりません。ファイルがバイナリ画像ファイルである場合、最初にその内容を正しく読む必要があります-ここに何があるかを推測するのに十分な情報が投稿にありません。
バックスラッシュを二重にする必要があるため、パスが間違っています-バックスラッシュは特殊文字のエスケープです。
os.listdir
は開いているファイルを返さず、ファイル名を返します。ファイル名を使用してファイルを開く必要があります。