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