Django阅读上传的CSV文件,其中包含一些空字段

时间:2012-06-22 20:42:50

标签: django csv

我正在编写一个Django视图,它接受一个附加的csv文件并将其读入db:

views.py:

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 could not convert string to float:

我可以为每个字段执行此操作:

            try:
                report.mean_air_temp = float(line[4])
            except(ValueError):
                report.mean_air_temp = None

这给了我所需的结果,但似乎并不那么健壮/优雅。

我很感激有关如何处理此代码块的任何指导。

1 个答案:

答案 0 :(得分:2)

在函数调用中将转换包装为float。

def convert_value(val, conversion=float):
    try:
        return conversion(val)
    except ValueError:
        return None

report.something = float(line[x]) if line[x] is not None else None