Доступ к данным столбца из файла CSV в Django 2.0 - PullRequest
0 голосов
/ 27 января 2020

С Django Администратор Я устанавливаю кнопку импорта для импорта файлов .csv. Все работает нормально, пока я устанавливаю models.py с CharField.

Когда я превращаю его в 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'

У меня красные десятки информации об этой топи c но ничего из этого не помогло мне разобраться в моей проблеме. Насколько я понял, мой приоритет здесь - предварительно обработать файл .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

1 Ответ

1 голос
/ 27 января 2020

Попробуйте использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...