将.txt读入Python对象并创建一个列表

将.txt读入Python对象并创建一个列表,python,python-3.x,object,Python,Python 3.x,Object,我正在尝试使用python制作纸牌游戏。我在下面有一个文本文件,它是卡ID、卡名称、卡描述和卡生命点 1, Medusa, Feel The Wraith, 98 2, Gigle , See Him See Him, 54 3, Brozi , Pinch an inch, 91 下面我有一些python。我有一个python类,它只是一张卡片。我想做的是有这些卡片(类对象)的一副牌(列表)。下面是我正在尝试执行的一些代码,这些代码将读取文本文件并将它们放入对象中,然后放入列表中 impor

我正在尝试使用python制作纸牌游戏。我在下面有一个文本文件,它是卡ID、卡名称、卡描述和卡生命点

1, Medusa, Feel The Wraith, 98
2, Gigle , See Him See Him, 54
3, Brozi , Pinch an inch, 91
下面我有一些python。我有一个python类,它只是一张卡片。我想做的是有这些卡片(类对象)的一副牌(列表)。下面是我正在尝试执行的一些代码,这些代码将读取文本文件并将它们放入对象中,然后放入列表中

import sys
import os
class Card:
    def__init__(self, card_id, name, desc, hp):
        self.card_id = card_id
        self.name = name
        self.desc = desc
        self.hp = hp
        self.cards = []

deck = []

fh = open('dets.txt').readlines()
for line in fh:
    row = line.split(',')
    card_id, name, desc, hp = [i.strip() for i in row]
    card = deck.get(card_id, Card(card_id, name, desc, hp))
    deck[card_id] = card
我在轨道上吗?我对Python比较陌生。谢谢

制作底部部分:

deck = []

with open('dets.txt') as fh:
    for line in fh:
        row = line.strip().split(', ')
        deck.append(Card(*row))

您使用的是list,它没有任何get方法。 试着用字典

它将帮助您检索类对象

所以当你们想得到一张卡片的对象时,只需输入

if card_id in myDict.keys():
    myDict(card_id)

如果您只想将这些卡片对象放入列表中,请执行以下操作:

deck = []
fh = open('dets.txt').readlines()
for line in fh:
    row = line.split(',')
    card_id, name, desc, hp = [i.strip() for i in row]
    card = Card(card_id, name, desc, hp)
    deck = deck + [ card ] 
否则,通过查看您的代码,我认为您希望将它们存储在字典中,并使用
card\u id
作为
key
。要将它们存储在字典中

deck = {} #dictionary
fh = open('dets.txt').readlines()
for line in fh:
    row = line.split(',')
    card_id, name, desc, hp = [i.strip() for i in row]
    card = Card(card_id, name, desc, hp)
    deck[card_id] = card #'card_id' is the 'key' and 'card' is 'value'
要打印字典中的卡片名称,请使用循环的

for each_key in deck:
    print(each_key, " - ", deck[each_key].name )
这将提供以下输出:

1  -  Medusa
2  -  Gigle
3  -  Brozi

通过执行以下操作,您可以大大简化代码,并使其更加Python化:

  • 使用带有open('dets.txt')的
    作为f
    读取文件。您应该在打开文件时将其关闭,而此上下文管理器允许您在读取文件时无论发生什么情况都可以将其关闭
  • 考虑到每行参数的顺序与init方法中定义的参数的顺序相同,您可以使用名为的Python特性
  • 所以你,你可以使用下面的代码:

    import sys
    import os
    class Card:
        def__init__(self, card_id, name, desc, hp):
            self.card_id = card_id
            self.name = name
            self.desc = desc
            self.hp = hp
            self.cards = []
    
    deck = []
    
    with open('dets.txt') as f:
        for line in f:
            args = line.strip().split(', ')
            args[0] = int(args[0])
            args[-1] = int(args[-1])
            deck.append(Card(*args))
    
    考虑到您正在使用Python 3.7+ 您可以使用
    数据分类
    简化类定义,如下所示:

    @dataclass
    class Card:
        card_id: int
        name: str
        desc: str
        hp: int
    

    你有什么错误吗?或者它工作正常吗?如果你只是想得到一般的反馈,那么这是一个更好的方法fit@goodknight,您是否知道列表
    l
    的列表索引从0开始到
    len(l)-1
    ?我试图打印对象,但没有得到正确的结果。我想我打印的东西不全对吗?在
    def
    \uuuu init\uuuu
    @goodknightthank这就是我要找的东西!我该如何着手打印字典盒?
    @dataclass
    class Card:
        card_id: int
        name: str
        desc: str
        hp: int