我刚刚开始使用Python和编程,我有一个关于存储许多对象的一般问题.
到目前为止,我对对象的理解是:我可以定义一个对象:
class Meal:
Run Code Online (Sandbox Code Playgroud)
并且有功能,以便我可以找到它,例如Meal.drink返回'soda'和Meal.main返回'pizza'.到现在为止还挺好.
但是,我不确定在存储大量对象时我做的是正确的.现在,我将它们全部保存在列表中,这样每次我想记录一顿新餐时我都会这样做:
temp = Meal()
listOfMeals.append(temp)
Run Code Online (Sandbox Code Playgroud)
如果我想知道我在所有记录的食物中有多少次苏打水,我会在列表中重复并计算:
for each in listOfMeals
if each.drink == 'soda':
sodaCount = sodaCount + 1
Run Code Online (Sandbox Code Playgroud)
这是处理长对象列表的最佳方法吗?对我来说感觉有点笨拙,但由于我没有面向对象编程的经验(一般的编程经验很少),我不确定我是否忽略了一些明显的东西.
感谢您的任何帮助.
我有一个关于数据存储的问题.我有一个程序正在创建一个对象列表.将这些存储在文件中的最佳方法是什么,以便程序可以在以后重新加载它们?我曾尝试使用Pickle,但我想我可能正在走错路,当我尝试回读数据时,我不断收到此错误:
Traceback (most recent call last):
File "test.py", line 110, in <module>
knowledge = pickle.load(open("data.txt"))
File "/sw/lib/python3.1/pickle.py", line 1356, in load
encoding=encoding, errors=errors).load()
File "/sw/lib/python3.1/codecs.py", line 300, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 0: invalid start byte
Run Code Online (Sandbox Code Playgroud)
编辑添加:这里是我正在尝试的一些代码:
FILE = open("data.txt", "rb")
knowledge = pickle.load(open("data.txt"))
FILE = open("data.txt", 'wb')
pickle.dump(knowledge, FILE)
Run Code Online (Sandbox Code Playgroud)