在处理csv.DictReader()的输出时,是否有更好的方法来检查KeyErrors?

时间:2018-06-18 21:07:39

标签: python csv

我要处理很长(100多列)的CSV文件。有时,生成文件的人会在列的名称中出错。如果他们犯了错误就想忽略那个列,所以我有这么长的代码块,我在每个数据上都检查KeyError

    cr = csv.DictReader(response)
    for row in cr:
        try:
            creation_time = row['Creation Time']
        except KeyError:
            creation_time = ''
        try:
            current_pm_active = row['Current Active']
        except KeyError:
            current_pm_active = ''
        try:
            current_pm_total = row['Current Total']
        except KeyError:
            current_pm_total = ''
        ... and so on and on ... 

我怀疑可能有更好的方法对此进行编码。谢谢!

更新。谢谢你的问题。我将数据放入单个变量的原因是我将在Django模型中插入这些值,如下所示:

updated_vmt, created = Vmt.objects.update_or_create(
                cluster=cluster,
                added=datetime.datetime.today().strftime('%Y-%m-%d'),
                defaults={
                    'current_pm_active'   : current_pm_active,
                    'current_pm_total'    : current_pm_total,
                    ... big long list ...
                }
            )

2 个答案:

答案 0 :(得分:0)

将值保存在字典中而不是单个变量中;使用字典进行从预期的CSV列到“变量”名称的映射。现在,您可以遍历这些键,而不是拥有一堆if语句。

如果您按照defaults的方式键入字典中的值,那么您可以在插入语句中使用defaults = my_dictionary_of_row_data,避免使用另一个“大长列表”。

答案 1 :(得分:-1)

您可以使用pandas.read_csv生成数据框,并循环显示列