我有一个文本文件,我将信息作为变量读取,作为游戏中的保存系统。问题是我需要我的文档来读取和写入某一行,它在第一次写入和读取时工作正常,但是第二次在它之前的行向上移动一行并且我得到"索引超出范围&#34 ;因为尝试写入/读取的第I行是空白的。
我查看了我的代码,似乎无法找到问题..
gold=(60)
goldtxt=(str(gold) + 'gp')
inventory=['empty','empty','empty','empty','empty','empty','empty','empty','empty','empty',]
def ItemAdd(event):
gamestatus = linecache.getline('C:Location', 2).rstrip()
if gamestatus == 'gamestatus1':
gameinfo1[7] = (inventory[(-1)]).strip('empty') + ' '
gameinfo1[9] = goldtxt + ' '
with open('C:Location', 'w') as active:
active.writelines(gameinfo1)
RefreshTexts()
def RefreshTexts():
with open('C:Location', 'r') as file:
datatemplate = file.readlines()
with open('C:Location', 'r') as file:
gameinfo1 = file.readlines()
with open('C:Location', 'r') as file:
gameinfo2 = file.readlines()
with open('C:Location', 'r') as file:
gameinfo3 = file.readlines()
with open('C:Location', 'r') as file:
activeinfo = file.readlines()
我有一千多行,但我认为如果有一条问题就会出现问题。
答案 0 :(得分:2)
我认为错误发生的原因可能是因为您在某处使用rstrip
去除了行末尾的换行符;或者可能是你使用linecache
ab ;尽管Python 2文档说明了一般的行式随机访问,但在Python 3中,文档明确指出:
linecache模块允许用户从Python源文件获取任何行,同时尝试在内部进行优化,使用缓存,这是读取多行的常见情况来自单个文件。跟踪模块使用它来检索包含在格式化回溯中的源代码行。
在任何情况下,使用linecache
与您的用例匹配都非常差,因为linecache
假定文件不会更改,但您的保存文件确实会更改;并且您在保存后会刷新它们。我建议您使用json.load
和json.dump
类似的东西:
import json
def save_game(game_data):
with open('mysavedgame', 'w') as save_file:
json.dump(game_data, save_file)
def load_game():
with open('mysavedgame', 'r') as save_file:
return json.load(save_file)
def new_game():
return {
'items': [],
'money': 0
}
# when starting a new game
game_data = new_game()
# adding items, money:
game_data['items'].append('Crystal sword')
game_data['money'] += 60
# when saving a game, use
save_game(game_data)
# and load the data with
game_data = load_game()
print(game_data)
运行程序打印
{'money': 60, 'items': ['Crystal sword']}
并且mysavegame
的内容是
{"money": 60, "items": ["Crystal sword"]}