【问题标题】:How to check if something has been process Python如何检查是否已处理 Python
【发布时间】:2021-04-08 17:55:35
【问题描述】:

我必须检查一个字符串/电子邮件是否已被处理 如果已经处理是因为已经打印了“END”

我的流程是这样结构的循环,每天检查 5 天前:

获取电子邮件->处理电子邮件->获取信息->修改数据->“END”

我必须保存这个:

Email Processed? Date
a@gmail.com True 08/04/2021
b@gmail.com False 02/04/2021

我正在考虑使用这样的字典:

Keys: email, processed, date
Values: ['a@gmail.com','b@gmail.com'], [True, False], ['08/04/2021', '02/04/2021']

但我完全不确定

你有什么建议?

【问题讨论】:

  • 建议的方法是反直觉的并且不可扩展——简直丑陋。通常的方法是列出(3 个键控的)字典,每个字典对应一个记录。

标签: python


【解决方案1】:

您可以使用 JSON 作为对象列表(这是 valid JSON

[
   {
      "email":"foo@example.com",
      "processed":true,
      "date":"2021-04-08"
   },
   {
      "email":"bar@example.com",
      "processed":false,
      "date":"2021-04-06"
   }
]

与 Python 对象(listdict)的对应关系很简单。

【讨论】:

    【解决方案2】:

    让 Anandha 的回答更进一步,我会这样做:

    data = {'a@gmail.com' : {"processed":True,'date':'08/04/2021'}, 'b@gmail.com' : {"processed":False,'date':'02/04/2021'}}
    

    然后会有完整的状态报告:

    for key in data:
        if data[key]['processed'] not True:
            print("We have not yet processed account: " + key)         
        else:
            print(key + " was processed on " + data[key]['date'])
    

    或者如果您想检查个人

    key = "a@gmail.com"
    if data[key]['processed'] not True:
            print("We have not yet processed account: " + key)         
        else:
            print(key + " was processed on " + data[key]['date'])
    

    显然,您会将 if 循环放入一个单独的函数中以整理您的代码。

    就 5 天前的搜索而言,我建议您使用 datetime.strptime() 转换您的日期条目,然后使用 datetime.now() 中的 timedelta(days=-5) 检查其是否在 5 天窗口内。

    编辑:创建字典(单个条目):

    data = {}
    data['c@gmail.com']={'processed':False, 'date':'2021/04/08'}
    data['d@gmail.com']={'processed':True, 'date':'2021/04/07'}
    

    如果您是从现有文件或变量创建,那么我需要先查看它的形状,然后再提出建议。

    【讨论】:

    • 别着急,只是为了得到它,我根本没有真正使用它。我现在的问题是,我是使用字典列表还是带有电子邮件键的唯一字典??
    • 根据经验,当您可以使用字典时,请这样做。它更加灵活,使得索引编制和后期修改更加容易。
    • 我不知道如何创建您给我的这本字典,但使用变量而不是字符串。对于 a@gmail.com,变量是标头“电子邮件”,这是您的数据字典中的键,而值是其他标头,我只是不知道如何编写代码
    • 添加了用于向字典添加行的编辑。
    • 是的,我就是这么知道的,但是我必须使用变量:电子邮件,处理和日期因为我写的字符串,我不知道,它只是和示例数据= {}数据[电子邮件] = {已处理:'',日期:''}
    【解决方案3】:

    您建议的字典结构效果很好,但如果您将其扩展到数千封电子邮件,则检索这些数据会有点困难。如果您有一百万封电子邮件,并且要检查是否处理了 abc@gmail.com,则必须找到电子邮件的索引,然后使用该索引。

    我建议使用电子邮件作为此类事情的关键

    {'a@gmail.com' : [True,'08/04/2021'], 'b@gmail.com' : [False,'02/04/2021']}
    

    这样即使您有一百万封电子邮件,您也可以使用dictionary['a@gmail.com']获取所有详细信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多