利用整数和字符串混合的file.readline()

时间:2018-04-20 22:44:43

标签: python file readline

我对Python很陌生,我正在开发游戏,保存多个统计数据。但是,在尝试使用readline()加载这些统计信息时,我碰巧得到了混乱的值,混合了各种保存的统计信息。

# Save
...
file.write(str(p_lv)) # 1 (line 3)
file.write(str(p_xp)) # 10 (line 4)
file.write(str(p_swd)) # s01 (line 5)
...
# Load
...
p_lv = int(file.readline(3))
p_xp = int(file.readline(4))
p_swd = file.readline(5)
...

当我创建一个保存游戏时,它会将整个保存保存为单个字符串,如下所示:

8010015s01100Nutik

我尝试在框中调用带有该保存的加载命令,但结果是:

ValueError: invalid literal for int() with base 10: '5s01'

它混淆了我所处的位置,有没有办法可以获得它所以它会读取,例如,我写的第四个项目?

2 个答案:

答案 0 :(得分:0)

好像你没有写新线。

使用以下命令更改每个写入呼叫:

file.write(str(...) + '\n')

此外,file.readline()不参与辩论。删除它的数字参数,或者如果你没有使用所有的行,请执行:

lines = file.readlines()

x = int(lines[3])
...

答案 1 :(得分:0)

如果您要将每个统计值保存在文件的单独行中,则必须在保存时手动添加换行符。有些人喜欢:

file.write(str(p_lv) + "\n") # 1 (line 3)
file.write(str(p_xp) + "\n") # 10 (line 4)
file.write(str(p_swd) + "\n") # s01 (line 5)

当您重新读取文件时,请使用readlines方法,该方法实际返回读取文件中的行数组;因此,您将能够按顺序访问数据:

lines = file.readlines()
p_lv = int(lines[3])
p_xp = int(lines[4])
p_swd = lines[5]

更好的解决方案是以JSON格式序列化/反序列化统计数据:将统计数据保存在字典中,例如:

stats = {
   'p_lv': 123,
   'p_xp': 234,
   'p_swd': 'some string'
}

你会保存为:

import json
with open('filename.txt', 'w') as f:
    f.write(json.dumps(stats))

并将其读回:

with open('filename.txt') as f:
    stats = json.loads(f.read())