循环浏览文件夹中的文件

时间:2009-11-24 19:19:07

标签: python file loops

在编程时我很新,并且开始学习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就是一个字符串值(它们都是图片)

任何帮助表示感谢。

3 个答案:

答案 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不返回打开的文件,它返回文件名。您需要使用文件名打开文件。