Come faccio ad aprire un file che è un file Excel per la lettura in Python?
Ho aperto file di testo, ad esempio, sometextfile.txtcon il comando di lettura. Come posso farlo per un file Excel?
Come faccio ad aprire un file che è un file Excel per la lettura in Python?
Ho aperto file di testo, ad esempio, sometextfile.txtcon il comando di lettura. Come posso farlo per un file Excel?
Risposte:
Modifica:
nella versione più recente di panda, puoi passare il nome del foglio come parametro.
file_name = # path to file + file name
sheet = # sheet name or sheet number or list of sheet numbers and names
import pandas as pd
df = pd.read_excel(io=file_name, sheet_name=sheet)
print(df.head(5)) # print first 5 rows of the dataframe
Controlla i documenti per esempi su come passare sheet_name:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html
Vecchia versione:
puoi usare anche il pandaspacchetto ....
Quando lavori con un file Excel con più fogli, puoi 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à le prime 5 righe del 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()
Prova la libreria xlrd .
[Modifica] - da quello che posso vedere dal tuo commento, qualcosa come lo snippet qui sotto potrebbe fare il trucco. Presumo che tu stia cercando solo una colonna per la parola "john", ma potresti aggiungerne di più o trasformarla in 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)
Non è così semplice come aprire un file di testo semplice e richiederà una sorta di modulo esterno poiché non è integrato nulla per farlo. Ecco alcune opzioni:
Se possibile, potresti prendere in considerazione l'esportazione del foglio di calcolo Excel come file CSV e quindi utilizzare il modulo csv python integrato per leggerlo:
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()
Puoi usare il pacchetto xlpython che richiede solo xlrd. Trovalo qui https://pypi.python.org/pypi/xlpython e la sua documentazione qui https://github.com/morfat/xlpython
Questo può aiutare:
Questo crea un nodo che accetta un elenco 2D (elenco di elementi di elenco) e li inserisce nel foglio di calcolo Excel. assicurati che gli IN [] siano presenti o genereranno un'eccezione.
questa è una riscrittura del nodo dinamo Excel di Revit per Excel 2013 poiché il nodo preconfezionato predefinito continuava a rompersi. Ho anche un nodo di lettura simile. La sintassi di Excel in Python è delicata.
thnx @CodingNinja - aggiornato :)
###Export Excel - intended to replace malfunctioning excel node
import clr
clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
##AddReferenceGUID("{00020813-0000-0000-C000-000000000046}") ''Excel C:\Program Files\Microsoft Office\Office15\EXCEL.EXE
##Need to Verify interop for version 2015 is 15 and node attachemnt for it.
from Microsoft.Office.Interop import * ##Excel
################################Initialize FP and Sheet ID
##Same functionality as the excel node
strFileName = IN[0] ##Filename
sheetName = IN[1] ##Sheet
RowOffset= IN[2] ##RowOffset
ColOffset= IN[3] ##COL OFfset
Data=IN[4] ##Data
Overwrite=IN[5] ##Check for auto-overwtite
XLVisible = False #IN[6] ##XL Visible for operation or not?
RowOffset=0
if IN[2]>0:
RowOffset=IN[2] ##RowOffset
ColOffset=0
if IN[3]>0:
ColOffset=IN[3] ##COL OFfset
if IN[6]<>False:
XLVisible = True #IN[6] ##XL Visible for operation or not?
################################Initialize FP and Sheet ID
xlCellTypeLastCell = 11 #####define special sells value constant
################################
xls = Excel.ApplicationClass() ####Connect with application
xls.Visible = XLVisible ##VISIBLE YES/NO
xls.DisplayAlerts = False ### ALerts
import os.path
if os.path.isfile(strFileName):
wb = xls.Workbooks.Open(strFileName, False) ####Open the file
else:
wb = xls.Workbooks.add# ####Open the file
wb.SaveAs(strFileName)
wb.application.visible = XLVisible ####Show Excel
try:
ws = wb.Worksheets(sheetName) ####Get the sheet in the WB base
except:
ws = wb.sheets.add() ####If it doesn't exist- add it. use () for object method
ws.Name = sheetName
#################################
#lastRow for iterating rows
lastRow=ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row
#lastCol for iterating columns
lastCol=ws.UsedRange.SpecialCells(xlCellTypeLastCell).Column
#######################################################################
out=[] ###MESSAGE GATHERING
c=0
r=0
val=""
if Overwrite == False : ####Look ahead for non-empty cells to throw error
for r, row in enumerate(Data): ####BASE 0## EACH ROW OF DATA ENUMERATED in the 2D array #range( RowOffset, lastRow + RowOffset):
for c, col in enumerate (row): ####BASE 0## Each colmn in each row is a cell with data ### in range(ColOffset, lastCol + ColOffset):
if col.Value2 >"" :
OUT= "ERROR- Cannot overwrite"
raise ValueError("ERROR- Cannot overwrite")
##out.append(Data[0]) ##append mesage for error
############################################################################
for r, row in enumerate(Data): ####BASE 0## EACH ROW OF DATA ENUMERATED in the 2D array #range( RowOffset, lastRow + RowOffset):
for c, col in enumerate (row): ####BASE 0## Each colmn in each row is a cell with data ### in range(ColOffset, lastCol + ColOffset):
ws.Cells[r+1+RowOffset,c+1+ColOffset].Value2 = col.__str__()
##run macro disbled for debugging excel macro
##xls.Application.Run("Align_data_and_Highlight_Issues")
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 puoi utilizzare la potenza dei DataFrames dei panda!
pandas.read_excel).