2015-02-12 3 views
0

Я пытаюсь загрузить текстовый файл с двумя данными столбца, разделенный вкладкой. Первые значения столбца могут быть целыми или поплавками, а второй столбец всегда будет плавать. Теперь я использую isinstance, чтобы увидеть, является ли мой первый столбец целым или плавающим. Однако isinstance не работает, если используется список значений или конечный элемент списка. Это мой код:isinstance не работает, когда список используется для проверки в Python

time_t = [] 
with open(logF, 'r') as f: 
    for line in f: 
     data_t = line.split() 
     time_t.append(data_t[0]) 

time_length_max = time_t[-1] 
print time_length_max 

if isinstance(time_length_max, (int, long)): 
    print "True" 
else: 
    print "False" 

Выход я получаю:

10000 
False 

Предположим, я объявляю time_length_max = 10000, вместо time_length_max = time_t[-1], я получаю:

10000 
True 
+0

Это похоже на проблему с преобразованием во время чтения файла, как правило, оно извлекает значение в виде строк. Так что, скорее всего, случай здесь – adifire

ответ

0

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

>>> type('10000') 
<type 'str'> 
>>> type(10000) 
<type 'int'> 
>>> type(int('10000')) 
<type 'int'> 
+0

Спасибо @JohnMee. В то время как 'int ('10000')' работает, если значение целое, но сбой при его поплавке. Я сделал это: 'time_t.append (int (data_t [0]))'. Это отлично работало для случая, когда 'time_t' было целым числом, но с ошибкой для значения float. – hypersonics

1

Вы можете попробовать это, как предложено в

https://stackoverflow.com/a/379966/350429

def num(s): 
    try: 
     return int(s) 
    except ValueError: 
     return float(s) 

time_t = [] 
with open(logF, 'r') as f: 
    for line in f: 
     data_t = line.split() 
     time_t.append(num(data_t[0])) 

time_length_max = time_t[-1] 
print time_length_max 

if isinstance(time_length_max, (int, long)): 
    print "True" 
else: 
    print "False" 

Учтите, что значение должно быть числом в файле, если это пустая строка, то она будет выдавать исключение.

+0

Спасибо @adifire. Ваш подход работает отлично. Однако, когда я проверяю весь список, он терпит неудачу. Например, вместо 'time_length_max' в' if isinstance (time_length_max, (int, long)) ', Если я использую' if isinstance (time_t (int, long)) ', он печатает' False', указывающий float. Однако мой time_t - это список от 1 до 10000, все из которых являются целыми числами. – hypersonics

+0

На самом деле isinstance (time_t, (int, long)) вернет false, потому что это список, а не потому, что это float или что-то еще. Чтобы проверить весь список, вам нужно будет проверить тип отдельных значений в time_t. – adifire

Смежные вопросы