Wie öffne ich eine Datei, die eine Excel-Datei zum Lesen in Python ist?
Ich habe beispielsweise Textdateien sometextfile.txt
mit dem Lesebefehl geöffnet . Wie mache ich das für eine Excel-Datei?
Wie öffne ich eine Datei, die eine Excel-Datei zum Lesen in Python ist?
Ich habe beispielsweise Textdateien sometextfile.txt
mit dem Lesebefehl geöffnet . Wie mache ich das für eine Excel-Datei?
Antworten:
Bearbeiten:
In der neueren Version von Pandas können Sie den Blattnamen als Parameter übergeben.
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
In den Dokumenten finden Sie Beispiele für die Übergabe sheet_name
:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html
Alte Version:
Sie können auch pandas
Paket verwenden ....
Wenn Sie mit einer Excel-Datei mit mehreren Blättern arbeiten, können Sie Folgendes verwenden:
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()
druckt die ersten 5 Zeilen Ihrer Excel-Datei
Wenn Sie mit einer Excel-Datei mit einem einzelnen Blatt arbeiten, können Sie einfach Folgendes verwenden:
import pandas as pd
df = pd.read_excel(path + filename)
print df.head()
Probieren Sie die xlrd-Bibliothek aus .
[Bearbeiten] - Nach dem, was ich aus Ihrem Kommentar ersehen kann, könnte so etwas wie das folgende Snippet den Trick machen. Ich gehe hier davon aus, dass Sie nur eine Spalte nach dem Wort "John" durchsuchen, aber Sie könnten mehr hinzufügen oder dies zu einer allgemeineren Funktion machen.
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)
Dies ist nicht so einfach wie das Öffnen einer Nur-Text-Datei und erfordert eine Art externes Modul, da hierfür nichts eingebaut ist. Hier sind einige Optionen:
Wenn möglich, sollten Sie die Excel-Tabelle als CSV-Datei exportieren und dann mit dem integrierten Python-CSV-Modul lesen:
Es gibt das openpxyl- Paket:
>>> 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()
Sie können das xlpython-Paket verwenden, für das nur xlrd erforderlich ist. Finden Sie es hier https://pypi.python.org/pypi/xlpython und seine Dokumentation hier https://github.com/morfat/xlpython
Dies kann helfen:
Dadurch wird ein Knoten erstellt, der eine 2D-Liste (Liste der Listenelemente) in die Excel-Tabelle überträgt. Stellen Sie sicher, dass die IN [] vorhanden sind oder eine Ausnahme auslösen.
Dies ist eine Neuschreibung des Revit Excel Dynamo-Knotens für Excel 2013, da der standardmäßig vorgefertigte Knoten immer wieder kaputt ging. Ich habe auch einen ähnlichen Leseknoten. Die Excel-Syntax in Python ist empfindlich.
thnx @CodingNinja - aktualisiert :)
###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)
Jetzt können Sie die Kraft von Pandas DataFrames nutzen!
pandas.read_excel
).