2010-07-13 30 views
51

Come si apre un file che è un file Excel per la lettura in Python?Come posso aprire un file Excel in Python?

Ho aperto file di testo, ad esempio sometextfile.txt con il comando di lettura. Come faccio a farlo per un file Excel?

+1

Quale versione di Excel? Se puoi limitarti ad aprire i file Excel creati da Ecel 2007 o 2010, dovresti essere in grado di analizzare la maggior parte o tutto il file come XML. –

+0

IT's excel 2003 :( – novak

risposta

14

Questo non è semplice come aprire un file di testo normale e richiede una sorta di modulo esterno poiché nulla è integrato per farlo. Ecco alcune opzioni:

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

Se possibile, si può prendere in considerazione l'esportazione del foglio di calcolo di Excel come un file CSV e quindi utilizzando il modulo csv python built-in per leggerlo:

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

+0

Ok, non capisco le cose CSV come faccio ad aprire python sul mio file excel come modulo csv? Ho un programma che fa quello che voglio per i file txt e voglio che lo faccia la stessa cosa per questo file excel ... qual è il modo migliore per andare? Puoi approfondire questo per favore? – novak

+0

O si può usare un modulo python di terze parti come xlrd, o salvare il file excel in un file CSV, invece di un normale file Excel. Penso che il punto che ti manca è che un file excel non ha alcuna somiglianza con un file di testo normale. Apri il documento Excel nel blocco note e vedrai cosa intendo. È necessario salvare il file in un formato di testo semplice come CSV (valori separati da virgola), che è più facile da leggere con python, oppure installare e utilizzare un modulo di terze parti in grado di analizzare un file Excel per conto proprio. –

+0

Il problema che sto avendo è che il file è davvero molto grande. Come posso salvare il file in formato CSV se non riesco ad aprire completamente il file? – novak

28

Prova the xlrd library.

[Modifica] - Da quello che posso vedere dal tuo commento, qualcosa come il frammento di seguito potrebbe fare il trucco. Suppongo che tu stia cercando una colonna per la parola "john", ma potresti aggiungerne di più o renderla una funzione più generica.

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

Penso che questo potrebbe essere quello che voglio fare: dall'importazione XLRD open_workbook libro = open_workbook (' simple.xls', on_demand = true) per il nome in book.sheet_names(): se name.endswith ('2'): foglio = book.sheet_by_name (nome) stampa sheet.cell_value (0,0) book.unload_sheet (name) large_files.py ma non voglio che usi endwith voglio che trovi e stampi linee che contengono un nome di materiale ... come voglio che stampi la linea dell'enorme foglio excel che contiene i dati di John e non quelli di Bob. Aiuto? – novak

+0

Suggerisco di postare questo come una domanda separata e inserire il codice in un blocco di codice. –

+0

Questa è la seconda domanda di una serie di domande correlate; nella terza domanda viene rivelato che il vero file excel è presumibilmente 1,5 GB e la memoria del computer è descritta come "non abbastanza" ... vedi http://stackoverflow.com/questions/3241039/how-do-i- estrai-specifiche-linee-di-dati-da-un-enorme-excel-sheet-using-python –

53

è possibile utilizzare pandas package così ....

Quando si lavora con un file di Excel con più fogli, è possibile utilizzare:

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() stamperà prime 5 righe del tuo file Excel

Se stai lavorando con un file Excel con un singolo foglio, puoi semplicemente usare:

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

Questo è l'ideale quando si lavora con molti fogli. –

+2

questa soluzione ottiene il mio upvote. con openpyxl, sto correndo il seguente problema "InvalidFileException: openpyxl non supporta il vecchio formato di file .xls, per favore usa xlrd per leggere questo file, o convertirlo nel più recente formato di file .xlsx". D'altra parte i panda gestiscono entrambi i file .xls e .xlsx ... inoltre, la lettura di un'intera tabella richiede solo una riga di codice. – nathanielng

+3

Dovrai installare dipendenze opzionali ['xlrd'] (https://pypi.python.org/pypi/xlrd) per leggere i file di Excel e [' xlwt'] (https://pypi.python.org/ pypi/xlwt) per scrivere file Excel. – Flimm

5

C'è il pacchetto 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) 

Ora è possibile utilizzare la potenza di panda DataFrames!

+1

La domanda riguarda la lettura di un file Excel, non un file di testo separato da virgole. Panda sembra avere una funzione per questo ('pandas.read_excel'). – Bart

-1

Questo codice ha funzionato per me con Python 3.5.2. Si apre, salva ed eccelle. Attualmente sto lavorando su come salvare i dati nel file, ma questo è il codice:

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

 

Problemi correlati