Python и проблема чтения файлов Excel - PullRequest
4 голосов
/ 18 июля 2011

Извините, если это глупый вопрос, но я работал над этим часами и не могу заставить его работать. Пожалуйста, помогите!

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

   from numpy import *

Я загружаю его в Python, делая

    infile = open('europenewMatrix.txt','r')
    infile.readline() # skip the first line
    numbers = [line.split(',')[2:] for line in infile.readlines()]
    infile.close()

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

    travelMat = array(numbers)

хорошо, но это не преобразовало строки в целые числа, поэтому я делаю это вручную:

    for i in xrange(len(numbers)):
        for j in xrange(len(numbers)):
            travelMat[i,j] = int(self.travelMat[i,j])
        #end for

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

    print 'type is',type(self.travelMat[1,2]) 

ответ:

type is <type 'numpy.string_'>

как я могу действительно преобразовать все мои записи в целые числа? Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

преобразуйте числа по мере их чтения перед созданием массива:

infile = open('europenewMatrix.txt','r')
infile.readline() # skip the first line
numbers = []
for line in infile:
    numbers.append([int(val) for val in line.split(',')[2:]])
infile.close()
travelMat = array(numbers)
1 голос
/ 18 июля 2011

Если вы работаете с csv или csv-подобным файлом, используйте модуль стандартной библиотеки csv.

from numpy import *
import csv

infile = open('europenewMatrix.txt', 'r')
reader = csv.reader(infile)
reader.next() # skip the first line
numbers = [[int(num) for num in row[2:]] for row in reader]
infile.close()

travelmat = array(numbers)

http://docs.python.org/library/csv.html

0 голосов
/ 20 июля 2011

, если у кого-то есть вопрос, который может иметь такое же название, но использует настоящие файлы Excel (.xls), попробуйте это (используя модуль xlrd ):

import xlrd
import numpy as np

sheet = xlrd.open_workbook('test_readxls.xls').sheet_by_name('sheet1')
n_rows, n_cols = 5,2
data = np.zeros((n_rows, n_cols))
for row in range(n_rows):
    for col in range(n_cols):
        data[row,col] = float(sheet.cell(row,col).value)
...