循环浏览文件夹中的文件

Fir*_*ras 34 python loops file

在编程方面我很新,并开始学习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)
Run Code Online (Sandbox Code Playgroud)

但我一直在路径名上出错,而​​pix就是一个字符串值(他们都是图片)

任何帮助赞赏.

Woo*_*kai 34

os.listdir()返回文件名列表.因此,filename是一个字符串.我猜你需要在迭代之前打开文件.

另外,要小心字符串中的反斜杠.它们主要用于特殊的转义序列,所以你需要通过加倍它们来逃避它们.你可以使用常量os.sep来更方便,甚至使用os.path.join():

folder = os.path.join('C:\\', 'Users', 'Sprinting', 'blue')
Run Code Online (Sandbox Code Playgroud)


Tim*_*ker 10

for pix in filename:
Run Code Online (Sandbox Code Playgroud)

迭代文件名的字母.所以这肯定不是你想要的.您可能希望通过以下方式替换该行:

with open(filename) as current_file:
    for pix in current_file:
Run Code Online (Sandbox Code Playgroud)

(假设Python 2.6)并相应地缩进循环的其余部分.

但是,我不确定新for循环是否符合您的要求,除非pix您指的是当前文件中的一行文本.如果文件是二进制图片文件,您首先需要正确阅读他们的内容 - 在您的帖子中没有足够的信息来猜测这里是什么.


Mar*_*som 3

该路径是错误的,因为反斜杠需要加倍 - 反斜杠是特殊字符的转义。

os.listdir不返回打开的文件,它返回文件名。您需要使用文件名打开该文件。