gpt4 book ai didi

python - 在 Python 中无法将字典保存到 .txt 文件而没有语法错误

转载 作者:行者123 更新时间:2023-12-01 08:09:57 25 4
gpt4 key购买 nike

我向字典中添加了 2 种不同的膳食和 2 种不同的单位数量,然后完美地保存到我的文本文件中,但是当我退出程序并重新加载文件时,出现语法错误。 (还有一些函数看起来没有完成,但这只是因为 Stack Overflow 告诉我不要添加所有代码。

尝试让字典不以空字典开头,但这并没有解决任何问题。

import pprint
import time

pretty = pprint.PrettyPrinter(width = 20)
meals = {}
command = ""
condition = False

f = open("meals.txt", "r+")
f.write(str(meals))
f.close()

def save_dict_to_file(meals):
f = open("meals.txt", "r+")
f.write(str(meals))
f.close()

def load_dict_from_file():
f = open("meals.txt", "r+")
data = f.read()
f.close()
return eval(data)

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)

def remove_entry():

def help():

def view_dict():

def ending_message():

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()

向字典添加多个条目后,我希望能够退出程序,加载备份,当我输入 view 来查看我的条目时,看看我之前添加的内容。这就是我得到的-

PS C:\Users\Alex\Desktop\Python\own_projects\mosh> python diabetes.py
Traceback (most recent call last):
File "diabetes.py", line 24, in <module>
load_dict_from_file()
File "diabetes.py", line 22, in load_dict_from_file
return eval(data)
File "<string>", line 1
{}lasagne': 12, 'fish and chips': 16}
^
SyntaxError: invalid syntax

最佳答案

该问题可能是由于未在文件中添加换行符引起的。一个简单的修复方法是:f.write(str(meals) + "\n")

但是在文本文件中编写代码然后对其进行评估是一个坏主意:

  • 该文件只能由您的 Python 程序读取
  • 它很容易出现语法错误(如您的问题)
  • 这是非常不安全的。恶意代码最终可能会出现在您的文件中。

只要你的字典中只存储文本、数字和真/假,它就可以用 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 程序中几乎所有内容的非常方便的方法。正如 Klaus D. 在评论中指出的那样,pickle 并不比你的方法更安全。您永远不应该从您不信任的来源加载 pickle 对象。

import pickle

with open("file.txt", "wb") as file:
pickle.dump(data, file)

with open("file.txt", "rb") as file:
data = pickle.load(file)

关于python - 在 Python 中无法将字典保存到 .txt 文件而没有语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55321238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com