Python'da okumak için Excel dosyası olan bir dosyayı nasıl açarım?
Örneğin, sometextfile.txt
okuma komutuyla metin dosyalarını açtım . Bunu bir Excel dosyası için nasıl yaparım?
Python'da okumak için Excel dosyası olan bir dosyayı nasıl açarım?
Örneğin, sometextfile.txt
okuma komutuyla metin dosyalarını açtım . Bunu bir Excel dosyası için nasıl yaparım?
Yanıtlar:
Düzenleme:
Pandaların yeni sürümünde, sayfa adını parametre olarak iletebilirsiniz.
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
Nasıl geçirileceğine ilişkin örnekler için belgelere bakın sheet_name
:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html
Eski sürüm: paketi
de kullanabilirsiniz ....pandas
Birden çok sayfalı bir excel dosyasıyla çalışırken şunları kullanabilirsiniz:
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()
Excel dosyanızın ilk 5 satırını yazdıracak
Tek sayfalı bir Excel dosyasıyla çalışıyorsanız, şunları kullanabilirsiniz:
import pandas as pd
df = pd.read_excel(path + filename)
print df.head()
Xlrd kitaplığını deneyin .
[Düzenle] - Yorumunuzdan görebildiğim kadarıyla, aşağıdaki ön bilgi gibi bir şey işe yarayabilir. Burada 'john' kelimesi için sadece bir sütun aradığınızı varsayıyorum, ancak daha fazlasını ekleyebilir veya bunu daha genel bir işlev haline getirebilirsiniz.
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)
Bu, düz bir metin dosyasını açmak kadar kolay değildir ve bunu yapmak için hiçbir şey yerleşik olmadığı için bir tür harici modül gerektirecektir. İşte bazı seçenekler:
Mümkünse, excel elektronik tablosunu bir CSV dosyası olarak dışa aktarmayı ve ardından bunu okumak için yerleşik python csv modülünü kullanmayı düşünebilirsiniz:
Orada openpxyl paketi:
>>> 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()
Yalnızca xlrd gerektiren xlpython paketini kullanabilirsiniz. Burada https://pypi.python.org/pypi/xlpython ve belgelerini burada bulabilirsiniz https://github.com/morfat/xlpython
Bu yardımcı olabilir:
Bu, bir 2B Liste (liste öğeleri listesi) alan ve bunları excel elektronik tablosuna iten bir düğüm oluşturur. IN [] 'lerin mevcut olduğundan emin olun veya fırlatır ve istisna oluşturur.
varsayılan önceden paketlenmiş düğüm bozulmaya devam ettiği için bu, Excel 2013 için Revit excel dinamo düğümünün yeniden yazılmasıdır. Ayrıca benzer bir okuma düğümüm var. Python'daki excel sözdizimi dokunaklı.
thnx @CodingNinja - güncellendi:)
###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)
Artık pandaların DataFrame'lerinin gücünü kullanabilirsiniz!
pandas.read_excel
).