Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么变量在写入文本文件时会换行?_Python_Python 3.x - Fatal编程技术网

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是正确的解决方案。这些文本文件的奇怪行为只是糟糕解决方案的一个症状。