在文件夹中循环遍历文件

34

我在编程方面还很新,开始学习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上出现了一个字符串值的错误(它们都是图片)

任何帮助都将不胜感激。


你能展示一下你所遇到的具体错误信息吗? - perimosocordiae
这是一项学校作业吗?我从谷歌获取的所有与您的“媒体”模块相关的搜索结果似乎都表明是这样的。 - Brent Writes Code
3个回答

35

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

此外,在字符串中使用反斜杠要小心。它们通常用于特殊的转义序列,因此您需要通过加倍来转义它们。您可以使用常量 os.sep 使其更加便携,甚至可以使用 os.path.join()

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

对于现在来到这里的任何人,为了避免反斜杠字符重复,可以在字符串前使用 r,例如 r'C:\' - Josh Gallagher

10
for pix in filename:

遍历文件名中的字母。这显然不是你想要的。你可能希望用以下代码替换此行:

with open(filename) as current_file:
    for pix in current_file:
(假设原文中有标签嵌套):

假设使用 Python 2.6,然后相应地缩进循环的其余部分。

但是,我不确定新的for循环是否符合您的要求,除非您用pix指的是当前文件中的一行文本。如果文件是二进制图片文件,则需要正确读取它们的内容-您的帖子中没有足够的信息来猜测正确的方法。


3
路径错误是因为反斜杠需要加倍 - 反斜杠是特殊字符的转义符号。 os.listdir 不会返回打开的文件,它返回的是文件名。您需要使用文件名打开文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接