Bagaimana cara membuka file yang merupakan file Excel untuk dibaca dengan Python?
Saya telah membuka file teks, misalnya, sometextfile.txt
dengan perintah membaca. Bagaimana cara melakukannya untuk file Excel?
Bagaimana cara membuka file yang merupakan file Excel untuk dibaca dengan Python?
Saya telah membuka file teks, misalnya, sometextfile.txt
dengan perintah membaca. Bagaimana cara melakukannya untuk file Excel?
Jawaban:
Sunting:
Di versi panda yang lebih baru, Anda dapat memasukkan nama sheet sebagai parameter.
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
Periksa dokumen untuk mengetahui contoh cara mengirimkan sheet_name
:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html
Versi lama:
Anda juga dapat menggunakan pandas
paket ....
Saat Anda bekerja dengan file excel dengan banyak lembar, Anda dapat menggunakan:
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()
akan mencetak 5 baris pertama dari file Excel Anda
Jika Anda bekerja dengan file Excel dengan satu lembar, Anda cukup menggunakan:
import pandas as pd
df = pd.read_excel(path + filename)
print df.head()
Coba perpustakaan xlrd .
[Sunting] - dari apa yang dapat saya lihat dari komentar Anda, sesuatu seperti cuplikan di bawah ini mungkin bisa membantu. Saya berasumsi di sini bahwa Anda hanya mencari satu kolom untuk kata 'john', tetapi Anda dapat menambahkan lebih banyak atau menjadikannya fungsi yang lebih umum.
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)
Ini tidak semudah membuka file teks biasa dan akan membutuhkan semacam modul eksternal karena tidak ada yang built-in untuk melakukan ini. Berikut beberapa opsinya:
Jika memungkinkan, Anda mungkin ingin mempertimbangkan untuk mengekspor spreadsheet excel sebagai file CSV dan kemudian menggunakan modul csv python built-in untuk membacanya:
Ada paket 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()
Anda dapat menggunakan paket xlpython yang hanya membutuhkan xlrd. Temukan di sini https://pypi.python.org/pypi/xlpython dan dokumentasinya di sini https://github.com/morfat/xlpython
Ini dapat membantu:
Ini membuat node yang mengambil Daftar 2D (daftar item daftar) dan mendorongnya ke dalam spreadsheet excel. pastikan IN [] ada atau akan melempar dan pengecualian.
ini adalah penulisan ulang node dynamo excel Revit untuk excel 2013 karena node default yang telah dikemas terus rusak. Saya juga memiliki node baca yang serupa. Sintaks excel di Python sangat sensitif.
thnx @CodingNinja - diperbarui:)
###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)
Sekarang Anda dapat menggunakan kekuatan DataFrames pandas!
pandas.read_excel
).