在编程时我很新,并且开始学习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就是一个字符串值(它们都是图片)
任何帮助表示感谢。
答案 0 :(得分:34)
os.listdir()返回文件名列表。因此,filename
是一个字符串。我猜你需要在迭代之前打开文件。
另外,请注意字符串中的反斜杠。它们主要用于特殊的转义序列,所以你需要通过加倍它们来逃避它们。您可以使用常量os.sep
来提高可移植性,甚至可以使用os.path.join()
:
folder = os.path.join('C:\\', 'Users', 'Sprinting', 'blue')
答案 1 :(得分:10)
for pix in filename:
遍历文件名的字母。所以这肯定不是你想要的。您可能希望通过以下方式替换该行:
with open(filename) as current_file:
for pix in current_file:
(假设是Python 2.6)并相应地缩进循环的其余部分。
但是,我不确定新的for
循环是否符合您的要求,除非pix
表示当前文件中的一行文本。如果文件是二进制图片文件,您首先需要正确阅读他们的内容 - 在您的帖子中没有足够的信息来猜测这里是什么。
答案 2 :(得分:3)
路径错误,因为反斜杠需要加倍 - 反斜杠是特殊字符的转义。
os.listdir
不返回打开的文件,它返回文件名。您需要使用文件名打开文件。