我有一个程序,一半工作,这是不够好的。它应该采取一个目录和一个字典,并改变字典,以获得文件名的键(减去扩展名)和pygame图像表面的值,如果它是一个图片,如果该项是一个目录,它的值将是另一个字典,包含该目录的内容。例如,如果我有一个看起来像这样的树:
pics +
|
pic1.png
|
pic2.png
|
other_pics
+-
pic1.png
|
pic2.png
您使用pics
作为目录,使用空白字典作为字典,您将获得:
{'pic1': <Surface object etc...>
'pic2': <Surface object etc...>
'other_pics': {
'pic1': <Surface object etc...>
'pic2': <Surface object etc...>
}}
我的代码如下:
from pygame.image import load
import os
def gather_pics(dictionary, dir='.'):
print(dir)
for item in os.listdir(dir):
if os.path.isdir(item):
dictionary[item] = {}
gather_pics(dictionary[item], '{}{}{}'.format(dir, '\\' if os.name == 'nt' else '/', item))
elif item[-4:] in ('.png', '.jpg'):
dictionary[item.split('.')[0]] = load('{}{}{}'.format(dir, '\\' if os.name == 'nt' else '/', item))
if __name__ == '__main__':
dict = {}
gather_pics(dict)
print(dict)
我不认为它是在子目录的子目录中循环,因为它通常只是为我的所有图片的目录找到一个空的dict。 任何帮助,将不胜感激。谢谢!
答案 0 :(得分:1)
问题在线
if os.path.isdir(item):
您不添加以前的路径,因此程序会检查,而不是检查other_pics的图片。 for other_pics
另外,创建路径的更好方法是os.path.join
if os.path.isdir(os.path.join(dir, item)):
比设计:
最好不要传递字典并写入它,但要将其归还。另外要检查文件类型,如果你想添加not-3-chars-long类型
,请使用split我的代码:
from pygame.image import load
import os
def gather_pics(dir='.'):
dictionary = {}
print(dir)
for item in os.listdir(dir):
if os.path.isdir(os.path.join(dir, item)):
dictionary[item] = gather_pics(os.path.join(dir, item))
elif item.split(".")[-1] in ('png', 'jpg'):
dictionary[item.split('.')[0]] = load(os.path.join(dir, item))
return dictionary
if __name__ == '__main__':
dict = gather_pics()
print(dict)
刚刚注意到你使用“dict”作为变量,小心,它是类型