设置计数器以了解要开始的号码

时间:2015-06-23 03:09:17

标签: python counter pickle python-3.4

我希望以下计数器检查列表中字典内的order num类。

...code...
self.counter = count(1)
def submit(self):

        if Database.xoomDatabase[0]["Num Orden"] == next(self.counter):
            self.counter = Database.xoomDatabase["Num Orden"]
        Database.xoomDatabase.append(ordenOrganiz)

我正在做这种类型的计数器的原因是因为我每次关闭应用程序时都会转储一个pickle文件,其中包含Database.xoomDatabase。执行应用程序时,将加载pickle转储并将其中的所有字典推送回Database.xoomDatabase。这是保存在Database.xoomDatabase上的字典:

global ordenOrganiz
        ordenOrganiz = {"Num Order": nicenum,
                        "Nombre": nombre, 
                        "Email": email,
                        "Num Tel/Cel": num,
                        "Orden Creada:": fechacreacion1,
                        "Fecha de Entrega": fechaentrega}
        print(ordenOrganiz["Nombre"])
        return dict(ordenOrganiz)

我的问题是:我怎样才能在从pickle转储文件加载的最后一个“Order Num”中启动计数器?

编辑: 这是在Anand S Kumar的帮助下,我得到它的工作方式:

if len(Database.xoomDatabase) == 0:
            newCount = 0
        else:
            newCount = max(Database.xoomDatabase, key = lambda x:x['Num Orden'])["Num Orden"]
        nombre = contents1
        nicenum = int(newCount) + 1

此循环检查列表中是否有任何已保存的词典。如果没有dics。,计数从1开始。如果已经保存了dics。,计数将从保存到pickle转储中的最后一个“Orden Num”(订单号)开始。

xoomDatabase = []
if path.isfile(file_path) == False:
    open(file_path, "w").close()
else:
    loadLis = open(file_path, "rb")
    dalis = pickle.load(loadLis)
    loadLis.close()
    xoomDatabase.extend(dalis)

此循环检查是否有要加载的文件,如果没有,则将其复制。如果已经存在已保存的pickle转储,则它将使用先前保存的dicts加载列表。

1 个答案:

答案 0 :(得分:1)

您可以直接在类中创建一个类变量,然后使用Class.<variable>访问它,并且在__init__()函数中使用此Class.<variable>来初始化每个变量的计数器并增加计数器。

示例 -

class TempClass
    counterInit = 0
    def __init__(self):
        self.counter = TempClass.counterInit
        TempClass.counterInit += 1
    ...

然后在程序开始时,从pickle转储中读回数据,然后取最大计数器并将其设置为计数器,如下例所示。

示例 -

TempClass.counterInit = max(Database.xoomDatabase, key = lambda x:x['Num Orden'])

以上max()给出了词典列表中最大的Num Orden