Python - хранить переменные в списке, который сохраняется каждый раз при перезапуске программы

Я застрял на, казалось бы, простой задаче с IRC-ботом Python Twitch, который я разрабатываю для своего канала. У меня с системой баллов все разобрался, и я думал, что она работает, но обнаружил, что каждый раз, когда я перезапускаю программу, список, который содержит балансы пользователей, сбрасывается.

Это потому, что я объявляю пустой список в начале скрипта каждый раз, когда программа запускается. Если пользователь общается и его нет в списке приветствуемых пользователей, то бот будет приветствовать их и добавит их имя в список, а их баланс в соответствующий список.

Можно ли как-то обойти эту проблему сброса и сделать так, чтобы список не сбрасывался каждый раз при перезапуске программы? Заранее спасибо, и вот мой код:

welcomed = []
balances = []

def givePoints():
    global balances
    threading.Timer(60.0, givePoints).start()
    i = 0
    for users in balances:
        balances[i] += 1
        i += 1
def welcomeUser(user):
    global welcomed
    global balances
    sendMessage(s, "Welcome, " + user + "!")
    welcomed.extend([user])
    balances.extend([0])

givePoints()
#other code here...

if '' in message:
    if user not in welcomed:
        welcomeUser(user)
break

(Я пытался использовать глобальные переменные для решения этой проблемы, однако они не сработали, хотя я предполагаю, что использовал их неправильно: P)


person lucap    schedule 26.02.2016    source источник
comment
Вы не можете сохранить список между выполнениями сценария, но вы можете записать список в файл и прочитать его при запуске.   -  person Paul Rooney    schedule 26.02.2016
comment
Я думал об этом, однако будет ли он вставлять строковые версии текстового файла в список таким образом, чтобы он не позволял ему перебирать балансы и увеличивать их?   -  person lucap    schedule 26.02.2016
comment
Существует несколько способов сохранения списков, таких как json и pickle. Вы бы прочитали этот список при перезапуске и получили бы текущие значения.   -  person tdelaney    schedule 26.02.2016
comment
См. этот вопрос.   -  person Paul Rooney    schedule 26.02.2016


Ответы (1)


Попробуйте использовать модуль json для дампа и загрузки ваш список. Вы можете обнаружить проблемы с открытием файлов при загрузке списка и использовать их для инициализации пустого списка.

import json

def loadlist(path):
    try:
        with open(path, 'r') as listfile:
            saved_list = json.load(listfile)
    except Exception:
            saved_list = []
    return saved_list

def savelist(path, _list):
    try:
        with open(path, 'w') as listfile:
            json.dump(_list)
    except Exception:
        print("Oh, no! List wasn't saved! It'll be empty tomorrow...")
person aghast    schedule 26.02.2016