【问题标题】:Accessing column data from a CSV file in Django 2.0从 Django 2.0 中的 CSV 文件访问列数据
【发布时间】:2020-01-27 10:01:39
【问题描述】:

从 Django Admin 我正在设置导入按钮以导入 .csv 文件。 只要我使用 CharField 设置 models.py,一切正常。

当我把它变成 FloatField 时:

from django.db import models

class Moon(models.Model):
    name = models.CharField(max_length=30) 
    code_name = models.IntegerField() 
    planet = models.FloatField()
    lumen = models.FloatField()
    power = models.FloatField() 

当数据的浮点数用逗号而不是点分隔时,我收到行[3]的错误:

无法将字符串转换为浮点数:'0,00'

我有很多关于该主题的信息,但这些信息都没有帮助我找出我的问题。据我了解,我的首要任务是预处理包含数千行的 .csv 文件,在上传到 admin.py 之前对其进行预格式化。 我对么?关于如何进行的任何提示?

def import_csv(self, request):
    if request.method == "POST":
        csv_file = TextIOWrapper(request.FILES["csv_file"].file, encoding='utf-8')
        reader = csv.reader(csv_file)

        # create Moon object from passed in data
        for row in reader:
            Moon.objects.get_or_create(
                name=row[0],                         <-- that row is a str
                code_name=row[1],                    <-- that row is an int
                planet=row[2],                       <-- that row is an int
                lumen=row[3],                        <-- that row is a float
                power=row[4]                         <-- that row is a float

【问题讨论】:

    标签: python django


    【解决方案1】:

    尝试使用str.replace(",", '.')

    例如:

    def import_csv(self, request):
        if request.method == "POST":
            csv_file = TextIOWrapper(request.FILES["csv_file"].file, encoding='utf-8')
            reader = csv.reader(csv_file)
    
            # create Moon object from passed in data
            for row in reader:
                Moon.objects.get_or_create(
                    name=row[0],                         <-- that row is a str
                    code_name=row[1],                    <-- that row is an int
                    planet=row[2],                       <-- that row is an int
                    lumen=row[3].replace(",", '.'),                        <-- that row is a float
                    power=row[4].replace(",", '.')                         <-- that row is a float
    

    【讨论】:

    • 非常感谢!如果导入的值为 null,空行怎么办?
    猜你喜欢
    • 2013-06-15
    • 1970-01-01
    • 2020-08-03
    • 2019-03-24
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多