【问题标题】:Utilizing file.readline() with a mix of integers and strings使用 file.readline() 混合整数和字符串
【发布时间】:2018-04-20 22:44:42
【问题描述】:

我对 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'

它混淆了我所在的位置,有什么方法可以让它读取,例如,我写的第四条?

【问题讨论】:

    标签: python file readline


    【解决方案1】:

    看来你没有写换行符。

    将每个写入调用更改为:

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

    另外,file.readline() 不接受参数。删除它的数字参数,或者如果您没有使用所有行,请执行以下操作:

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

    【讨论】:

      【解决方案2】:

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

      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())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多