Django正在读取上载的CSV文件,其中包含一些空字段
我正在编写一个Django视图,它获取一个附加的csv文件并将其读入数据库: 视图。py:Django正在读取上载的CSV文件,其中包含一些空字段,django,csv,Django,Csv,我正在编写一个Django视图,它获取一个附加的csv文件并将其读入数据库: 视图。py: def climate_upload(request): ... if form.is_valid(): # All validation rules pass file = request.FILES['attach'] for line in file: line = line.split(';')
def climate_upload(request):
...
if form.is_valid(): # All validation rules pass
file = request.FILES['attach']
for line in file:
line = line.split(';')
report = Site1()
...
# These fields values be empty, integer or float
report.mean_air_temp = float(line[4])
report.min_air_temp = float(line[5])
report.max_air_temp = float(line[6])
report.sea_temp = float(line[7])
report.mean_rel_hum = float(line[8])
report.precipitation = float(line[9])
report.save()
file.close()
我知道这是一段非常粗糙的代码,但如果我运行它并且其中一个字段为空(“”),我会得到一个ValueError无法将字符串转换为float:
我可以为每个字段执行此操作:
try:
report.mean_air_temp = float(line[4])
except(ValueError):
report.mean_air_temp = None
这给了我所需的结果,但似乎没有那么健壮/优雅
如果您能提供有关如何处理此代码块的指导,我将不胜感激。在函数调用中包装转换为float
def convert_value(val, conversion=float):
try:
return conversion(val)
except ValueError:
return None
或
如果文件中的数字为0.0,则后者可能不会产生所需的输出。我使用了第二种方法。谢谢你。
report.something = float(line[x]) if line[x] is not None else None