CSV Reader преобразует числа в десятичные числа, когда они хранятся в виде строк - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть CSV-файл, который содержит слова и цифры, но все они считываются как строки. Мой CSV-файл выглядит примерно так:

Hello,50,Banana,100,Dog,80

При считывании с помощью CSV Reader все числа по-прежнему хранятся в виде строк, но изменяются на 50,0, 100,0 и 80,0. Кто-нибудь знает почему это и как от этого избавиться?

Вот код, который я использую (CSV-файл перевернут с того, как обычно, вот почему я использовал этот алгоритм:

with open(csvFinal) as file:
        for line in csv.reader(file):
            if len(line) > 0 and re.search("Token\d", line[1]):
                if line[-1] == "":
                    csvDict[line[1]] = line[2:-1]
                else:
                    csvDict[line[1]] = line[2:]

1 Ответ

0 голосов
/ 04 апреля 2019

По ссылке:

CSV Reader Руководство пользователя

csv.reader (csvfile, dialect = 'excel', ** fmtparams) Возвращает читателя объект, который будет перебирать строки в данном csvfile. csvfile может быть любым объектом, который поддерживает протокол итератора и возвращает строка

и

Каждая строка, считанная из файла CSV, возвращается в виде списка строк. нет автоматическое преобразование типов данных выполняется, если только Опция формата QUOTE_NONNUMERIC указана (в этом случае без кавычек поля превращаются в числа с плавающей точкой).

По умолчанию все результаты являются строковыми и, если вы не используете кавычку, выполнение заливки данных не выполняется.

Использование данного примера внутри .csv:

Hello,50,Banana,100,Dog,80

Простой код:

import csv

with open('your_file.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for row in csv_reader:
        for cell in row:
            print(cell, type(cell))

Вернется:

Hello <class 'str'>                                                                                                                            
50 <class 'str'>                                                                                                                           
Banana <class 'str'>                                                                                                                       
100 <class 'str'>                                                                                                                          
Dog <class 'str'>                                                                                                                          
80 <class 'str'> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...