2010-07-13 210 views
51

¿Cómo abro un archivo que es un archivo de Excel para leer en Python?¿Cómo puedo abrir un archivo de Excel en Python?

He abierto archivos de texto, por ejemplo, sometextfile.txt con el comando de lectura. ¿Cómo hago eso para un archivo de Excel?

+1

¿Qué versión de Excel? Si puede limitarse a abrir archivos de Excel creados por Ecel 2007 o 2010, debería poder analizar mucho o todo el archivo como XML. –

+0

Es Excel 2003 :( – novak

Respuesta

14

Esto no es tan sencillo como abrir un archivo de texto plano y requerirá algún tipo de módulo externo ya que no hay nada incorporado para hacer esto. Aquí están algunas opciones:

http://www.python-excel.org/

Si es posible, es posible que desee considerar la exportación de la hoja de cálculo de Excel como un archivo CSV y luego usando el módulo csv pitón incorporado para leerlo:

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

+0

Ok, realmente no entiendo las cosas de CSV, ¿cómo hago para que python abra mi archivo Excel como módulo csv? Tengo un programa que hace lo que quiero para los archivos txt y quiero que lo haga lo mismo para este archivo de Excel ... ¿cuál es la mejor manera de hacerlo? ¿Pueden dar más detalles sobre esto, por favor? – novak

+0

O puede usar un módulo python de terceros como xlrd, o guardar su archivo Excel en un archivo CSV, en lugar de un archivo Excel normal. Creo que el punto que te falta es que un archivo de Excel no se parece a un archivo de texto plano. Abra el documento de Excel en el bloc de notas y verá lo que quiero decir. O necesita guardar el archivo en un formato de texto plano como CSV (valores separados por comas), que es más fácil de leer con Python, o instalar y usar un módulo de terceros que pueda analizar un archivo de Excel por usted. –

+0

El problema que tengo es que el archivo es realmente muy grande. ¿Cómo puedo guardar el archivo como formato CSV si no puedo abrir completamente el archivo? – novak

28

Pruebe the xlrd library.

[Editar] - por lo que puedo ver en tu comentario, algo así como el siguiente fragmento podría hacer el truco. Supongo que solo está buscando una columna para la palabra 'john', pero podría agregar más o hacer de esto una función más genérica.

from xlrd import open_workbook 

book = open_workbook('simple.xls',on_demand=True) 
for name in book.sheet_names(): 
    if name.endswith('2'): 
     sheet = book.sheet_by_name(name) 

     # Attempt to find a matching row (search the first column for 'john') 
     rowIndex = -1 
     for cell in sheet.col(0): # 
      if 'john' in cell.value: 
       break 

     # If we found the row, print it 
     if row != -1: 
      cells = sheet.row(row) 
      for cell in cells: 
       print cell.value 

     book.unload_sheet(name) 
+0

Creo que esto podría ser lo que yo quiero que haga: de importación XLRD open_workbook libro open_workbook = (' simple.xls', ON_DEMAND = True) para el nombre en book.sheet_names(): si name.endswith ('2'): hoja = book.sheet_by_name (nombre) sheet.cell_value de impresión (0,0) book.unload_sheet (name) large_files.py pero no quiero que use endwith quiero que encuentre e imprima líneas que contengan un nombre de particula ... como si quisiera que imprima la línea de la enorme hoja de Excel que contiene datos de John y no de Bob. ¿ayuda? – novak

+0

Sugiero que publique esto como una pregunta separada y coloque el código en un bloque de código. –

+0

Esta es la segunda pregunta de una serie de preguntas relacionadas; en la tercera pregunta se revela que el archivo de Excel real es supuestamente de 1,5 GB y la memoria de la computadora se describe como "insuficiente" ... ver http://stackoverflow.com/questions/3241039/how-do-i- extract-specific-lines-of-data-from-a-huge-excel-sheet-using-python –

53

puede utilizar pandas package, así ....

Cuando se trabaja con un archivo de Excel con varias hojas, puede utilizar:

import pandas as pd 
xl = pd.ExcelFile(path + filename) 
xl.sheet_names 

>>> [u'Sheet1', u'Sheet2', u'Sheet3'] 

df = xl.parse("Sheet1") 
df.head() 

df.head() imprimirá primeras 5 filas de su archivo de Excel

Si está trabajando con un archivo de Excel con una sola hoja, puede simplemente usar:

import pandas as pd 
df = pd.read_excel(path + filename) 
print df.head() 
+2

Esto es ideal cuando se trabaja con muchas hojas. –

+2

esta solución obtiene mi voto popular. con openpyxl, me encuentro con el siguiente problema "InvalidFileException: openpyxl no es compatible con el antiguo formato de archivo .xls, use xlrd para leer este archivo o conviértalo al formato de archivo .xlsx más reciente". Por otro lado, pandas maneja archivos .xls y .xlsx ... también, leer una tabla completa toma solo una línea de código. – nathanielng

+3

Necesitará instalar dependencias opcionales ['xlrd'] (https://pypi.python.org/pypi/xlrd) para leer archivos de Excel, y [' xlwt'] (https://pypi.python.org/ pypi/xlwt) para escribir archivos de Excel. – Flimm

5

Ahí está el paquete de openpxyl:

>>> from openpyxl import load_workbook 
>>> wb2 = load_workbook('test.xlsx') 
>>> print wb2.get_sheet_names() 
['Sheet2', 'New Title', 'Sheet1'] 

>>> worksheet1 = wb2['Sheet1'] # one way to load a worksheet 
>>> worksheet2 = wb2.get_sheet_by_name('Sheet2') # another way to load a worksheet 
>>> print(worksheet1['D18'].value) 
3 
>>> for row in worksheet1.iter_rows(): 
>>>  print row[0].value() 
-3
import pandas as pd 
import os 
files = os.listdir('path/to/files/directory/') 
desiredFile = files[i] 
filePath = 'path/to/files/directory/%s' 
Ofile = filePath % desiredFile 
xls_import = pd.read_csv(Ofile) 

Ahora puede usar el poder de tramas de datos pandas!

+1

La pregunta es acerca de leer un archivo de Excel, no un archivo de texto separado por comas. Pandas parece tener una función para eso ('pandas.read_excel'). – Bart

-1

Este código funcionó para mí con Python 3.5.2. Se abre y guarda y se destaca. Actualmente estoy trabajando en la forma de guardar los datos en el archivo, pero este es el código:

import csv 
excel = csv.writer(open("file1.csv", "wb")) 

 

Cuestiones relacionadas