Pythons ConfigParser将我的文件读取为列表

1 投票
1 回答
2131 浏览
提问于 2025-04-18 22:32

我正在用 pygame 制作一个游戏,并且我使用 ConfigParser 来解析地图瓷砖的各种信息。但是当我到达这部分代码时

parse.read(filename)

它输出了这个错误

self.level = self.config.get("level","map")
    AttributeError: 'list' object has no attribute 'get'

我猜 parse.read(filename) 返回的是一个列表,而不是我想要的对象。这里是我的代码。我在谷歌上搜索过,但找不到相关的信息。

import pygame
import ConfigParser

parse = ConfigParser.ConfigParser()

class MakeLevel():
    def MapMake(self,spriteList,filename):
        self.config = parse.read(filename)
        self.level = self.config.get("level","map")
        self.LegendDict = self.config.get("dictionary")
        self.Proper = []
        self.newTile = None
        self.x = 0
        self.y += 50
        #Get propper legend stats
        for items in LegendDict:
            for row in level:
                for col in row:
                    if col == items:
                        #LegendDict[items]
                        self.image = self.config.get(items, "image")
                        self.newTile =  MapTile(self.image,self.x,self.y)
                        return spriteList.add(self.newTile)
                x += 50
            y += 50
            x = 0


class MapTile(pygame.sprite.Sprite):
    def __init__(self,image,x,y):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(image)
        self.rect = Rect(x, y, 32, 32)


class Controller():
    def __init__(self):
        pass

    def Keys(self):
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_a:
                    return 'a'
                if event.key == pygame.K_d:
                    return 'd'

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_a:
                    return 'a up'
                if event.key == pygame.K_d:
                    return 'd up'

AllSprites = pygame.sprite.Group()

makeLevel = MakeLevel()

makeLevel.MapMake(AllSprites,"level1.ini")

AllSprites.draw()

我还尝试过提前打开文件,但还是不行。

mapFile = open("level1.ini")
makeLevel.MapMake(AllSprites, mapFile)

我确保 level1.ini 文件和 main.py 文件在同一个文件夹里。希望问题不是那么明显。

1 个回答

3

ConfigParser.read 方法会返回一个成功解析的文件名列表,所以在你的例子中,self.config 是一个文件名的列表——很可能是 ['level1.ini']。解析完之后,你可能想要从解析器中使用 .get 方法。可以这样做:

    def MapMake(self,spriteList,filename):
        parse.read(filename)
        self.level = parse.get("level", "map")

撰写回答