我必须开发一个程序,在json文件中存储鸡尾酒的列表,为了修改一个元素,删除一个元素,添加一个元素,这些列表必须可读。json文件的内容永远都不正确,我不明白添加鸡尾酒时它的变化,因此我的代码肯定有问题。
这是我的代码:
import json
from cocktail import Cocktail
from cocktail import Ingrediente
class Carta:
def __init__(self, filename):
self.__filename = filename
self.__lista = []
try:
file=open(self.__filename,"r")
self.__lista.append(json.load(file))
print(self.__lista)
except:
file=open(self.__filename, "w")
file.close()
file = open(self.__filename, "r")
def add(self, c):
print(self.__lista)
self.__lista.append(str(c))
#print(self.__lista)
def write_to_json_file(self):
file=open(self.__filename,"w")
#print(self.__lista)
for c in self.__lista:
json.dump(c, file, indent=2)
file.close()
carta=Carta("prova.json")
cocktail=Cocktail()
cocktail.set_nome("Rum e Cola")
cocktail.set_alc("Y")
cocktail.set_prep("Versa la cola nel rum")
cocktail.set_bicchiere("Di vetro")
cocktail.set_gen("Pesante")
cocktail.set_diff("M")
cocktail.set_img("https://rivistaidra.files.wordpress.com/2012/08/img_poc32_44.jpg")
ingrediente=Ingrediente()
ingrediente.set_nome("Rum")
ingrediente.set_quantita("100ml")
#
ingrediente2=Ingrediente()
ingrediente2.set_nome("Coca-Cola")
ingrediente2.set_quantita("150ml")
#
cocktail.add_ingrediente(ingrediente)
cocktail.add_ingrediente(ingrediente2)
#
carta.add(cocktail)
carta.write_to_json_file()
也许看鸡尾酒课可能很有用:
import requests
import json
class Cocktail:
def __init__(self):
self.cocktail = {"nome": "", "alc": "", "diff": "", "gen": "", "bicchiere":"", "prep":"", "img":"", "ingredienti": []}
def set_nome(self,nome):
self.cocktail["nome"] = nome
def set_alc(self, alc):
self.cocktail["alc"]= alc
def set_diff(self,diff):
self.cocktail["diff"]=diff
def set_gen(self, gen):
self.cocktail["gen"]=gen
def set_bicchiere(self, bicchiere):
self.cocktail["bicchiere"]=bicchiere
def set_prep(self, prep):
self.cocktail["prep"]=prep
def add_ingrediente(self,ingrediente):
self.cocktail["ingredienti"].append(ingrediente.ingrediente)
def set_img(self, url):
self.cocktail["img"]=url
def __str__(self):
# trasforma in stringa json
#indent = 2 serve per indentare meglio il file json e renderlo piu' leggibile
return str(self.cocktail)
class Ingrediente:
def __init__(self):
self.ingrediente={"quantita": "", "nome": ""}
def set_quantita(self, quantita):
self.ingrediente["quantita"]=quantita
def set_nome(self,nome):
self.ingrediente["nome"]=nome
def __str__(self):
return json.dumps(self.ingrediente)
# c=Cocktail()
# c.set_nome("Tuzzia")
# c.set_diff("M")
# c.set_gen("Superalcolico")
# c.set_bicchiere("Vetro")
# c.set_prep("Fallo")
# c.set_alc("Y")
# c.set_img("https://rivistaidra.files.wordpress.com/2012/08/img_poc32_44.jpg")
#
# i=Ingrediente()
# i.set_nome("Tuz")
# i.set_quantita("20ml")
# c.add_ingrediente(i)
#
# print(str(c))
提前感谢。
尝试打开带有附加选项'+ a'的文件。和__lista = dict()