Python 为什么变量在写入文本文件时会换行?
我有一个文本文件,我从中读取信息作为变量,作为我游戏中的一个保存系统。问题是我需要我的文档读写到某一行,第一次读写时效果很好,但第二次读写时,在它上移一行之前,我得到了“索引超出范围”,因为我试图写/读的行是空的 我查看了我的代码,似乎找不到问题Python 为什么变量在写入文本文件时会换行?,python,python-3.x,Python,Python 3.x,我有一个文本文件,我从中读取信息作为变量,作为我游戏中的一个保存系统。问题是我需要我的文档读写到某一行,第一次读写时效果很好,但第二次读写时,在它上移一行之前,我得到了“索引超出范围”,因为我试图写/读的行是空的 我查看了我的代码,似乎找不到问题 gold=(60) goldtxt=(str(gold) + 'gp') inventory=['empty','empty','empty','empty','empty','empty','empty','empty','empty','emp
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()
我有一千多行,但我认为如果有一行的话,问题就出在这里。我认为出现错误的原因可能是因为您在某个地方使用了
rstrip
,它在行尾去掉了换行符;或者可能是您正在使用linecache
,而ab;尽管Python2文档介绍了一般的行随机访问,但在Python3文档中明确指出:
linecache模块允许用户从Python源文件中获取任何一行,同时尝试使用缓存进行内部优化,这是从单个文件中读取多行的常见情况。这由回溯模块用于检索源行以包含在格式化的回溯中
在任何情况下,使用linecache
都不适合您的用例,因为linecache
假定文件不会更改,但您的保存文件会更改;保存后,您将刷新它们。我建议您使用and将游戏状态数据保存并加载到单个字典中
比如:
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"]}
我认为出现错误的原因可能是因为您在某个地方使用了
rstrip
,在行尾去掉了换行符;或者可能是您正在使用linecache
,而ab;尽管Python2文档介绍了一般的行随机访问,但在Python3文档中明确指出:
linecache模块允许用户从Python源文件中获取任何一行,同时尝试使用缓存进行内部优化,这是从单个文件中读取多行的常见情况。这由回溯模块用于检索源行以包含在格式化的回溯中
在任何情况下,使用linecache
都不适合您的用例,因为linecache
假定文件不会更改,但您的保存文件会更改;保存后,您将刷新它们。我建议您使用and将游戏状态数据保存并加载到单个字典中
比如:
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"]}
为什么不能将数据结构保存为文件,而不是添加或删除换行符incorrectly@AnttiHaapala我对python比较陌生,因此,我没有使用.JSON文件的经验。所有
gameinfo…=
背后的逻辑是什么?为什么不能将数据结构保存为文件,而不是添加或删除换行符incorrectly@AnttiHaapala我对python比较陌生,因此,我没有处理.JSON文件的经验。所有gameinfo…=
背后的逻辑是什么?我同意JSON是正确的解决方案。这些文本文件的奇怪行为只是糟糕解决方案的一个症状。我同意json是正确的解决方案。这些文本文件的奇怪行为只是糟糕解决方案的一个症状。