Как я могу сохранить данные после закрытия моей программы?

В настоящее время я работаю над каталогом телефонной книги, используя словари. Я не знал, как сохранить информацию после закрытия программы. Мне нужно сохранить переменную Информация, чтобы я мог добавить ее позже и распечатать.

    Information={"Police":911}
    def NewEntry():
        Name=raw_input("What is the targets name?")
        Number=raw_input("What is the target's number?")
        Number=int(Number)
        Information[Name]=Number

    NewEntry()
    print Information

Изменить: сейчас я использую модуль Pickle, и это мой текущий код, но он не работает:

     import pickle
     Information={"Police":911}
     pickle.dump(Information,open("save.p","wb"))
      def NewEntry():
         Name=raw_input("What is the targets name?")
         Number=raw_input("What is the target's number?")
         Number=int(Number)
         Information[Name]=Number
    Information=pickle.load(open("save.p","rb"))
    NewEntry()
    pickle.dump(Information,open("save.p","wb"))
    print Information

person Beta_Penguin    schedule 22.02.2015    source источник


Ответы (3)


Вы можете записать текстовый файл в виде строки, а затем прочитать синтаксический анализ как словарь:

Write

with open('info.txt', 'w') as f:
    f.write(str(your_dict))

Read

import ast

with open('info.txt', 'r') as f:
    your_dict = ast.literal_eval(f.read())
person Malik Brahimi    schedule 22.02.2015

Вы можете использовать модуль Pickle:

 import pickle

 # Save a dictionary into a pickle file.    
 favorite_color = { "lion": "yellow", "kitty": "red" }
 pickle.dump( favorite_color, open( "save.p", "wb" ) )

Or :

 # Load the dictionary back from the pickle file.
 favorite_color = pickle.load( open( "save.p", "rb" ) )
person Alexander    schedule 22.02.2015

Рассол работает, но есть некоторые потенциальные риски безопасности при чтении маринованных объектов.

Другой полезный прием — создание файла phonebook.ini и его обработка с помощью конфигурационного анализатора Python. Это дает вам возможность редактировать ini-файл в текстовом редакторе и легко добавлять записи.

** В этом решении я использую новые f-строки Python 3 и переименовал «Информация» в «Телефонную книгу», чтобы придерживаться стандартных соглашений об именах переменных.

Вы хотели бы добавить некоторую обработку ошибок для надежного решения, но это иллюстрирует для вас суть:

import configparser

INI_FN = 'phonebook.ini'


def ini_file_create(phonebook):
    ''' Create and populate the program's .ini file'''
    with open(INI_FN, 'w') as f:
        # write useful readable info at the top of the ini file
        f.write(f'# This INI file saves phonebook entries\n')
        f.write(f'# New numbers can be added under [PHONEBOOK]\n#\n')
        f.write(f'# ONLY EDIT WITH "Notepad" SINCE THIS IS A RAW TEXT FILE!\n\n\n')
        f.write(f"# Maps the name to a phone number\n")
        f.write(f'[PHONEBOOK]\n')
        # save all the phonebook entries
        for entry, number in phonebook.items():
            f.write(f'{entry} = {number}\n')
        f.close()


def ini_file_read():
    ''' Read the saved phonebook from INI_FN .ini file'''
    # process the ini file and setup all mappings for parsing the bank CSV file
    config = configparser.ConfigParser()
    config.read(INI_FN)
    phonebook = dict()
    for entry in config['PHONEBOOK']:
        phonebook[entry] = config['PHONEBOOK'][entry]
    return phonebook

# populate the phonebook with some example numbers
phonebook = {"Police": 911}
phonebook['Doc'] = 554

# example call to save the phonebook
ini_file_create(phonebook)

# example call to read the previously saved phonebook
phonebook = ini_file_read()

Вот содержимое созданного файла phonebook.ini

# This INI file saves phonebook entries
# New numbers can be added under [PHONEBOOK]
#
# ONLY EDIT WITH "Notepad" SINCE THIS IS A RAW TEXT FILE!


# Maps the name to a phone number
[PHONEBOOK]
Police = 911
Doc = 554
person Scott Hellam    schedule 30.03.2018