2017-01-21 2 views
0

Я новичок в Python, и я почти просто изучаю вещи, когда я иду.Прочитать строку как целые числа? (Python 2.7)

Я пытаюсь импортировать данные из файла Excel в мою программу Python. Мне нужно иметь возможность делать простые вычисления с этими числами в программе Python, а не в Excel. Это как код выглядит сейчас:

import csv 
    with open ('vals.csv','rb') as csvfile: 
     reader = csv.reader(csvfile) 
     x = next(reader) 
     y = next(reader) 
     z = next(reader) 

     print x[0]+z[2] 
     print x[0]+1 

Первый оператор печати должен дать мне 7 (потому что первый х 3 и третий г составляет 4). Вместо этого он печатает 34, поэтому я предполагаю, что они не обрабатывают значения как целые числа?

Второй оператор печати вызывает эту ошибку:

TypeError: cannot concatenate 'str' and 'int' objects 

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

x = next(reader) 
    x = int(x) 
    y = next(reader) 
    y = int(y) 
    z = next(reader) 
    z = int(z) 

Но это дает мне эту ошибку:

TypeError: int() argument must be a string or a number, not 'list' 

Так что я предполагаю, что это не читает его как строку?

Я просто хочу знать, как я могу заставить его читать что-то вроде x [0] (и всех остальных) в качестве целого числа, чтобы я мог выполнять вычисления с ним.

+0

http://stackoverflow.com/help/someone-answers –

ответ

0

csv.reader модуль дает список строк строк на каждой итерации.

То есть, даже если для каждой строки имеется только один столбец или данные содержат целые числа.

Чтобы получить список целых чисел в каждой строке сделать это в списке понимание:

row1 = [int(x) for x in next(reader)] 

или так как это питон 2:

row1 = map(int,next(reader)) 

затем использовать row1[2] для доступа к 3-й элемент из строки как целое.

0

csv.reader является итерацию из lists строк, соответствующих столбцов в строке:

x = next(reader) 
# x: ['3', '4', '5'] 

Если все значения могут быть преобразованы в int, вы можете сделать:

x = map(int, x) 
# x: [3, 4, 5] 

В противном случае, вам придется преобразовывать эти поля отдельно:

x[0] = int(x[0]) 
+0

Большое вам спасибо! Теперь он отлично работает! – user7446944

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