Python 将文本文件中的行追加到列表中时,会将整行设置为字符串。如何识别文本文件中的不同数据类型?

Python 将文本文件中的行追加到列表中时,会将整行设置为字符串。如何识别文本文件中的不同数据类型?,python,python-3.x,list,text-files,Python,Python 3.x,List,Text Files,我正在使用Python3.7.0制作一个神奇宝贝游戏,我正在使用文本文档制作一个保存/加载函数。文本文件中的每一行都包含一个字符串和一个整数,我想知道是否有一种方法可以识别这些数据类型已经存在,并在保留类型的同时将它们附加到列表中 由此引起的一个子问题是,索引中的每个字符都被视为单独的索引,而不是用逗号分隔的每个部分 我曾尝试在单独的行上拆分每个数据类型,并分别追加每个数据类型,然后检查它是否包含引号,但这只会让我得到与我得到的结果相同的结果 文本文件中的每一行显示如下(“名称”,级别): 我将

我正在使用Python3.7.0制作一个神奇宝贝游戏,我正在使用文本文档制作一个保存/加载函数。文本文件中的每一行都包含一个字符串和一个整数,我想知道是否有一种方法可以识别这些数据类型已经存在,并在保留类型的同时将它们附加到列表中

由此引起的一个子问题是,索引中的每个字符都被视为单独的索引,而不是用逗号分隔的每个部分

我曾尝试在单独的行上拆分每个数据类型,并分别追加每个数据类型,然后检查它是否包含引号,但这只会让我得到与我得到的结果相同的结果

文本文件中的每一行显示如下(“名称”,级别):

我将文件加载到列表中的代码如下:

path,dirs,files=next(os.walk(“resources/saves”)#读取目录
fileCount=len(文件)
当fileCount>0时:
对于os.listdir(“资源/保存”)中的文件名:#迭代目录
文件计数-=1
loadFile=open(“资源/保存/%s”%(文件名),“r”)
pokeCount=6
对于loadFile中的行:
如果pokeCount>0:
party.append(line.split())#将前六个神奇宝贝添加到party中
pokeCount-=1
其他:
pc.append(line.split())#将rest添加到pc
打印(“已加载游戏!”)
在获得以下输出后,我尝试:

对于参与方中的i:
对于i中的j:
j、 替换(“\”,“”)
打印(j)#测试是否将每个零件作为索引处理
然而,我将每个字符打印在一行新行上,好像每个字符都是一个新的索引,而不是将名称和级别视为两个单独的索引

我希望附加列表如下所示:

[['charmander',12],['bulbasaur,7],['squirtle',13]]
然而,我得到的清单是:

[["'charmander','12'"],["'bulbasaur,'7'"],["'squirtle','13'"]]
数字被视为字符串,然后整个索引被视为高级字符串。我希望在子列表的第一个索引中将名称视为字符串,在子列表的第二个索引中将级别视为整数


感谢所有能够理解这一点并提供帮助的人!

您不需要使用计数器,只需检查产品列表的长度-如果达到6,请停止解析文件

您需要在
处拆分文件的每一行,并将级别转换回数字-您可以从文件中读取字符串:

创建文件:

读取并处理文件:

输出:

[['charmander', 12], ['bulbasaur', 7], ['squirtle', 13]]

如果不是行,最好说
:继续
以避免添加缩进(从第一个
开始尝试
)?另外:由于这是Python3.7,您可以使用
f=Path(“data.txt”)来避免整个
缩进…
。read_text().splitlines()
(as
pathlib.Path
包含上下文处理程序)@Subrivean我不介意缩进-它花费了我什么吗?我只看到3.x标记。我不希望包含对pathlib.Path的依赖,如果不包含,则从pathlib导入路径发出
f=Path(“data.txt”)。read_text().splitlines()
需要将整个文件加载到内存中(这里没有问题)但是这种方法可以逐行读取文件,因此它也可以在10000000000行上工作——你的建议需要巨大的内存
-我很少处理超过1000行左右的文件。至于缩进,我认为它确实有潜在的“成本”:在阅读代码时跟踪缩进原因的心理负担。正如我们从Python的禅宗中所知道的,“扁平比嵌套好”“-尽管人们可能会争论这是否适用于数据、代码或两者。
t = """
'charmander',12

'bulbasaur',7

'squirtle',13"""
with open("data.txt","w") as f: 
    f.write(t)

pokemons = []

with open("data.txt") as f:
    for line in f:          
        line = line.strip() # remove \n and other whitespaces
        if line:            # only process non empty lines
            try:
                poke, lvl = line.split(",")
            except ValueError:
                print("Unable to split line into 2 parts: ", line)
                continue

            try:
                lvl = int(lvl)                       # convert to int
            except ValueError:
                print("Unable to convert lvl to number: ", lvl)
                continue

            poke = poke.strip("'")               # get rid of the delimiting '

            # add to list of pokemons when all was ok   
            pokemons.append( [poke,lvl] )

        if len(pokemons) ==  6:
            break

print(pokemons) 
[['charmander', 12], ['bulbasaur', 7], ['squirtle', 13]]