2016-11-05 3 views
0

Я импортирую файл csv в python. Как и ожидалось, он создает списки с каждым значением в виде строки, однако я хочу избежать этого. Есть ли способ для python обнаружить, что значение на самом деле является int, хотя оно выглядит так: «24»?Обнаружение типа данных у нас

спасибо.

+1

Какую библиотеку вы используете? каковы ваши данные? Вы должны дать более подробную информацию –

+0

Что делать, если какой-то столбец содержит иногда строку, а иногда и строку int? вы должны быть более конкретными: покажите нам код. –

+0

См. [This] (http://stackoverflow.com/questions/15197673/using-pythons-eval-vs-ast-literal-eval) ответ. – Rockybilly

ответ

1

Возможно, вы захотите написать функцию, чтобы сделать это. Вы можете расширить его, чтобы охватить другие типы данных.

def return_str_type(str): 
    possible_type = [int, float] 
    for dtype in possible_type: 
     try: 
      str = dtype(str) 
      break 
     except: 
      pass 
    return type(str).__name__ 

print(return_str_type('4')) 
print(return_str_type('4.3')) 
print(return_str_type('s4')) 

Это даст Op

int 
float 
str 

Хотя вы должны быть осторожны с заказом. например int Проверка всегда должна быть до float.

+0

вам не нужно eval для этого, составить список с классами и сделать 'str = dtype (str)' – Copperfield

+0

обновлено согласно вашему предложению @Copperfield –

+0

Вы избили меня до него. У меня было то же самое, кроме функции, за исключением полной строки, и возвратил список преобразованных элементов. Используется с '' 'data = map (f, csv.reader)' '' – wwii

-1

Ряд различных модулей поддерживает это, pandas среди них. read_csv может выводить типы данных.

0

ast.literal_eval - это то, что вы ищете.

print ast.literal_eval('[1, 2, 3]') == [1, 2, 3] 
print ast.literal_eval('23') == 23 

Python также имеет eval команду, однако это не безопасно, потому что команды не-типов данных также могут быть обработаны для вредных целей посредством этой функции.

+0

Спасибо, я дал ему ход, и он говорит: Ошибка значения: неверная строка, но я буду продолжать пытаться. – plshelp