Welche Version von Excel? Wenn Sie sich darauf beschränken können, von Ecel 2007 oder 2010 erstellte Excel-Dateien zu öffnen, sollten Sie in der Lage sein, einen Großteil oder die gesamte Datei als XML zu analysieren.
Adam Crossland
Antworten:
96
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 namesimport pandas as pd
df = pd.read_excel(io=file_name, sheet_name=sheet)print(df.head(5))# print first 5 rows of the dataframe
Diese Lösung bekommt meine Zustimmung. Bei openpyxl tritt das folgende Problem auf: "InvalidFileException: openpyxl unterstützt das alte XLS-Dateiformat nicht. Verwenden Sie xlrd, um diese Datei zu lesen oder in das neuere XLSX-Dateiformat zu konvertieren." Auf der anderen Seite verarbeitet pandas sowohl XLS- als auch XLSX-Dateien. Außerdem erfordert das Lesen einer gesamten Tabelle nur eine Codezeile.
Nathanielng
3
Sie müssen optionale Abhängigkeiten xlrdzum Lesen von Excel-Dateien und xlwtzum Schreiben von Excel-Dateien installieren .
[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 =-1for cell in sheet.col(0):# if'john'in cell.value:break# If we found the row, print itif row !=-1:
cells = sheet.row(row)for cell in cells:print cell.value
book.unload_sheet(name)
Ich denke, dies könnte das sein, was ich möchte: von xlrd importiere open_workbook book = open_workbook ('simple.xls', on_demand = True) für den Namen in book.sheet_names (): if name.endswith ('2'): sheet = book.sheet_by_name (name) print sheet.cell_value (0,0) book.unload_sheet (name) large_files.py, aber ich möchte nicht, dass es endwith verwendet. Ich möchte, dass es Zeilen findet und druckt, die einen bestimmten Namen enthalten ... wie Ich möchte, dass es die Zeile des riesigen Excel-Blattes druckt, das Johns Daten enthält und nicht Bobs. Hilfe?
Novak
Ich würde vorschlagen, dass Sie dies als separate Frage posten und den Code in einen Codeblock einfügen.
Jon Cage
Dies ist die zweite Frage einer Reihe verwandter Fragen; In der dritten Frage wird offenbart, dass die echte Excel-Datei angeblich 1,5 GB groß
John Machin
16
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:
Ok, ich verstehe das CSV-Zeug nicht wirklich. Wie kann Python meine Excel-Datei als CSV-Modul öffnen? Ich habe ein Programm, das für txt-Dateien das tut, was ich will, und ich möchte, dass es für diese Excel-Datei dasselbe tut ... was ist der beste Weg? Können Sie das bitte näher erläutern?
Novak
Sie können entweder ein Python-Modul eines Drittanbieters wie xlrd verwenden oder Ihre Excel-Datei als CSV-Datei anstelle einer normalen Excel-Datei speichern. Ich denke, der Punkt, den Sie vermissen, ist, dass eine Excel-Datei keine Ähnlichkeit mit einer Nur-Text-Datei hat. Öffnen Sie das Excel-Dokument im Editor und Sie werden sehen, was ich meine. Sie müssen die Datei entweder in einem Nur-Text-Format wie CSV (durch Kommas getrennte Werte) speichern, das mit Python einfacher zu lesen ist, oder ein Modul eines Drittanbieters installieren und verwenden, das eine Excel-Datei für Sie analysieren kann.
Donald Miner
Das Problem, das ich habe, ist, dass die Datei wirklich sehr groß ist. Wie kann ich die Datei als CSV-Format speichern, wenn ich die Datei nicht vollständig öffnen kann?
Novak
@novak: Ihr Problem ist, dass Ihre Datei 1,5 GB ist und der Speicher Ihres Computers "nicht genug" ist ...
>>>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()
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 nodeimport 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.fromMicrosoft.Office.Interopimport*##Excel################################Initialize FP and Sheet ID##Same functionality as the excel node
strFileName = IN[0]##Filename
sheetName = IN[1]##SheetRowOffset= IN[2]##RowOffsetColOffset= IN[3]##COL OFfsetData=IN[4]##DataOverwrite=IN[5]##Check for auto-overwtiteXLVisible=False#IN[6] ##XL Visible for operation or not?RowOffset=0if IN[2]>0:RowOffset=IN[2]##RowOffsetColOffset=0if IN[3]>0:ColOffset=IN[3]##COL OFfsetif 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### ALertsimport 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 Exceltry:
ws = wb.Worksheets(sheetName)####Get the sheet in the WB baseexcept:
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=""ifOverwrite==False:####Look ahead for non-empty cells to throw errorfor 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"raiseValueError("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")
Dieser Code funktionierte für mich mit Python 3.5.2. Es öffnet und speichert und zeichnet sich aus. Ich arbeite derzeit daran, wie Daten in der Datei gespeichert werden, aber dies ist der Code:
Die Frage bezieht sich auf das Lesen einer Excel-Datei, nicht einer durch Kommas getrennten Textdatei. Pandas scheint eine Funktion dafür zu haben ( pandas.read_excel).
Antworten:
Bearbeiten:
In der neueren Version von Pandas können Sie den Blattnamen als Parameter übergeben.
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:
df.head()
druckt die ersten 5 Zeilen Ihrer Excel-DateiWenn Sie mit einer Excel-Datei mit einem einzelnen Blatt arbeiten, können Sie einfach Folgendes verwenden:
quelle
xlrd
zum Lesen von Excel-Dateien undxlwt
zum Schreiben von Excel-Dateien installieren .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.
quelle
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:
http://www.python-excel.org/
Wenn möglich, sollten Sie die Excel-Tabelle als CSV-Datei exportieren und dann mit dem integrierten Python-CSV-Modul lesen:
http://docs.python.org/library/csv.html
quelle
Es gibt das openpxyl- Paket:
quelle
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
quelle
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 :)
quelle
Dieser Code funktionierte für mich mit Python 3.5.2. Es öffnet und speichert und zeichnet sich aus. Ich arbeite derzeit daran, wie Daten in der Datei gespeichert werden, aber dies ist der Code:
quelle
Jetzt können Sie die Kraft von Pandas DataFrames nutzen!
quelle
pandas.read_excel
).