Из ссылки core javascript
===
Возвращаетtrue
, если операнды строго равны (см. выше) без преобразования типа.
Я не совсем помню, как работает красивая печать, но этот способ сделать это очень хрупкий. Вероятность того, что что-то не будет печататься так, как вы ожидаете, довольно высока, что может сломать ситуацию, как сейчас.
Я рекомендую использовать более стандартный формат передачи данных, такой как CSV или JSON. Если ваши данные плоские, я рекомендую CSV. Если ваши данные более сложны, я рекомендую JSON.
Я на мгновение отредактирую этот ответ с примерами обоих методов.
Пример CSV:
import csv
# This is a list of dictionaries
data = [
{
'meal': 'breakfast',
'units': 20
},
{
'meal': 'lunch',
'units': 40
},
{
'meal': 'dinner',
'units': 50
}
]
# If you wanted the values for lunch, you could do data[1]['units']
# This says access the second value inside the data list,
# and get the value for the units in that dictionary
def write_data(file_path='meals.csv'):
# Open the file for writing without adding extra new lines
# The with syntax will automatically close it for us
with open(file_path, 'w', newline='') as f:
# Create a dictionary writer, telling it what columns to expect
writer = csv.DictWriter(f, ['meal', 'units'])
writer.writeheader()
writer.writerows(data)
def read_data(file_path='meals.csv'):
new_data = []
# open the file for reading
with open(file_path) as f:
# Create a dictionary reader. It will figure things out automagically
reader = csv.DictReader(f)
for row in reader:
print(row)
new_data.append(row)
return new_data
print('writing data...')
write_data()
print('reading data...')
print(read_data())
Пример JSON:
import json
data = {
'lunch': 10,
'breakfast': 20,
'dinner': 30
}
def write_data(file_path='meals.json'):
# Open the file for writing without adding extra new lines
# The with syntax will automatically close it for us
with open(file_path, 'w', newline='') as f:
json.dump(data, f)
def read_data(file_path='meals.json'):
# open the file for reading
with open(file_path) as f:
new_data = json.load(f)
return new_data
print('writing data...')
write_data()
print('reading data...')
print(read_data())
это нужно для работы:
import pprint
import time
import os
pretty = pprint.PrettyPrinter(width = 20)
meals = {}
command = ""
condition = False
n = False
if not os.path.isfile('meals.txt'):
f = open("meals.txt", "w+")
f.write(str(meals))
f.close()
else:
n = True
def save_dict_to_file(meals):
f = open("meals.txt", "w+")
f.write(str(meals))
f.close()
def load_dict_from_file():
f = open("meals.txt", "r+")
data = f.read()
f.close()
return eval(data)
if n:
meals = load_dict_from_file()
def add_entry():
meal = input("Enter name of meal: ").lower()
units = int(input("Enter units needed: "))
meals[meal] = units
pretty.pprint(meals)
save_dict_to_file(meals)
import os
def remove_entry():
os.remove('meals.txt')
def help():
pretty.pprint('help')
def view_dict():
pretty.pprint(load_dict_from_file())
def ending_message():
pretty.pprint('done')
while True:
command = input("> ").lower()
if command == "help":
help()
elif command == "add":
add_entry()
elif command == "exit":
save_dict_to_file(meals)
ending_message()
time.sleep(3)
break
elif command == "remove":
remove_entry()
elif command == "view":
view_dict()
Возможно, проблема связана с тем, что в ваш файл не добавляются новые строки. Простое исправление было бы следующим: f.write(str(meals) + "\n")
Но писать код в текстовом файле и затем оценивать его - плохая идея:
Пока вы храните только текст, числа и true / false в своем словаре, он может быть очень четко представлен в файле JSON. Преимущество JSON в том, что он может быть прочитан практически любым языком программирования:
import json
data = {
"A": 1,
"B": {"C": 2}
}
# write data to file
with open("file.txt", "w") as file:
file.write(json.dumps(data))
# read data from file
with open("file.txt", "r") as file:
data = json.load(file)
Если вы храните более сложные объекты в вашем файле, например, экземпляры классов и т. Д., То вам следует рассмотреть pickle. Это еще одна встроенная библиотека и очень удобный способ хранения практически всего из вашей программы на Python. Как отметил Клаус Д. в комментарии, рассол не безопаснее, чем ваш подход. Вы никогда не должны загружать объект рассола из источника, которому вы не доверяете.
import pickle
with open("file.txt", "wb") as file:
pickle.dump(data, file)
with open("file.txt", "rb") as file:
data = pickle.load(file)