如何有条件地从文件中提取行,编辑它们并将其插回

时间:2017-04-02 00:49:00

标签: python

我在python中创建了一个简单的命令行游戏。 用户首先输入他们的昵称,该昵称存储为name

在游戏结束时,用户的分数存储在如下文件中:

wins = str(wins)
losses = str(losses)

file = open('scores.py','a')
file.write(name + ": wins = " + wins + "  losses = " + losses + "\n\n")
file.close

(我将'胜利'和#39;变量转换为字符串,因为我似乎无法将整数写入文件,我不知道'知道这是否可行(我确定是这样)但我不知道该怎么做。)

我希望玩游戏的用户有累积分数,即如果他们玩1场比赛并赢得6轮,玩另一场比赛并赢得2轮,我不希望在那里有2个参赛作品&score; score.py'文件,我想说:

*User*: wins = 8 losses = 0

我能想到这样做的唯一方法是,在每场比赛结束后,用户的名字和分数将附加到&scoreH分数。文件,但在此之前,逐行扫描文件以检查用户的昵称是否已经输入了分数。如果在游戏开始时输入的名称与在&rbsp; score.py'中特定行上读取的名称相同。文件,提取行,将胜利和损失的字符串值转换为整数,将游戏中的当前分数添加到存储的分数,然后将其写回文件。

非常感谢任何和所有的帮助,如果代码很糟糕且解决方案很简单,请原谅我,我对python非常陌生,而且我对代码也不是很精通。

1 个答案:

答案 0 :(得分:0)

您可以使用内置的json模块。我认为它非常适合您的用例。

import json

def update_scores(name, wins, losses, scores_file='scores.json'):
    try:
        with open(scores_file, 'r') as f:
            scores = json.load(f)
    except (IOError, ValueError):
        # Non existing or empty file.
        scores = {} 
    try:
        scores[name]['wins'] += wins
        scores[name]['losses'] += losses
    except KeyError:
        # Initialize user score
        scores[name] = {'wins': wins, 'losses': losses}
    with open(scores_file, 'w') as f:
        json.dump(scores, f)

# Use:
update_scores('foo', 3, 8)  # {"foo": {"wins": 3, "losses": 8}}
update_scores('foo', 3, 2)  # {"foo": {"wins": 6, "losses": 10}}
update_scores('bar', 8, 0)  # {"foo": {"wins": 6, "losses": 10}, "bar": {"wins": 8, "losses": 0}}