我要处理很长(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 ...
}
)
答案 0 :(得分:0)
将值保存在字典中而不是单个变量中;使用字典进行从预期的CSV列到“变量”名称的映射。现在,您可以遍历这些键,而不是拥有一堆if
语句。
如果您按照defaults
的方式键入字典中的值,那么您可以在插入语句中使用defaults = my_dictionary_of_row_data
,避免使用另一个“大长列表”。
答案 1 :(得分:-1)
您可以使用pandas.read_csv生成数据框,并循环显示列