设置一个计数器以了解从哪个数字开始
Setting up a counter to know in which number to start
我想让下面的计数器检查列表中字典中的订单号 class。
...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)
我做这种计数器的原因是每次应用程序关闭时我都会转储一个泡菜文件,其中包含 Database.xoomDatabase。当应用程序执行时,pickle dump 被加载并且其中的所有字典被推回 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.,则将从最后一个 "Orden Num"(Order Number) 保存到 pickle dump 中开始计数。
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)
这个循环检查是否有任何文件要加载,如果没有,它创建一个。如果已经有一个保存的泡菜转储,那么它将加载包含以前保存的字典的列表。
您可以直接在 class 中创建一个 class 变量,然后使用 Class.<variable>
访问它,并且在 __init__()
函数中使用这个 Class.<variable>
为每个变量初始化计数器并递增计数器。
例子-
class TempClass
counterInit = 0
def __init__(self):
self.counter = TempClass.counterInit
TempClass.counterInit += 1
...
然后在程序开始时,从 pickle dump 中读回数据,然后取出最大的计数器并将其设置为 counter,如下例所示。
例子-
TempClass.counterInit = max(Database.xoomDatabase, key = lambda x:x['Num Orden'])
上面的max()
给出了词典列表中最大的Num Orden
。
我想让下面的计数器检查列表中字典中的订单号 class。
...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)
我做这种计数器的原因是每次应用程序关闭时我都会转储一个泡菜文件,其中包含 Database.xoomDatabase。当应用程序执行时,pickle dump 被加载并且其中的所有字典被推回 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.,则将从最后一个 "Orden Num"(Order Number) 保存到 pickle dump 中开始计数。
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)
这个循环检查是否有任何文件要加载,如果没有,它创建一个。如果已经有一个保存的泡菜转储,那么它将加载包含以前保存的字典的列表。
您可以直接在 class 中创建一个 class 变量,然后使用 Class.<variable>
访问它,并且在 __init__()
函数中使用这个 Class.<variable>
为每个变量初始化计数器并递增计数器。
例子-
class TempClass
counterInit = 0
def __init__(self):
self.counter = TempClass.counterInit
TempClass.counterInit += 1
...
然后在程序开始时,从 pickle dump 中读回数据,然后取出最大的计数器并将其设置为 counter,如下例所示。
例子-
TempClass.counterInit = max(Database.xoomDatabase, key = lambda x:x['Num Orden'])
上面的max()
给出了词典列表中最大的Num Orden
。