我是一名新手程序员,所以请原谅我没有使用特定于Python的词汇。
假设我使用属性 CarReg ,制作,模型和 Color <定义类 CarSpecs / em>,创建此类的多个实例(称为记录)并逐个将它们附加到名为 SuperCars 的文本文件中。我希望我的程序要做的是读取整个文件并返回红色的汽车数量(即通过查找每个实例的属性 Color )。
这是我到目前为止所做的:
定义了一个类:
class Carspecs(object):
def __init__(self, carreg, make, model, color):
self.CarReg = carreg
self.Make = make
self.Model = model
self.Color = color
然后我创建了几个实例并定义了一个函数来将实例(或者你可以说''records'')添加到 SuperCars :
def addCar(CarRecord):
import pickle
CarFile = open('Supercars', 'ab')
pickle.dump(CarRecord, CarFile)
CarFile.close()
接下来我该怎么办才能输出红车的数量?
答案 0 :(得分:1)
您必须再次打开该文件,阅读所有记录,然后查看哪些车辆Color
属性等于红色。因为您要在pickle中保存每个实例,所以您必须执行以下操作:
>>> with open('Supercars', 'rb') as f:
... data = []
... while True:
... try:
... data.append(pickle.load(f))
... except EOFError:
... break
...
>>>
>>> print(x for x in data if x.Color == 'red')
我建议您将数据存储在列表中并挑选该列表,这样您就不必使用hacky循环获取所有项目。存储这样的列表很容易。假设您已创建CarSpec
个对象列表并将其存储在列表records
中:
>>> with open('Supercars', 'wb') as f:
... pickle.dump(records, f)
...
>>>
然后阅读它就像:
>>> with open('Supercars', 'rb') as f:
... data = pickle.load(f)
...
>>>
您甚至可以轻松过滤它:
>>> with open('Supercars', 'rb') as f:
... data = [x for x in pickle.load(f) if x.Color == 'Red']
...
>>>
如果您想在将它们存储在泡菜中之前显示,您可以遍历records
- 列表并打印红色的汽车。