Làm cách nào để mở tệp là tệp Excel để đọc bằng Python?
Ví dụ, tôi đã mở các tệp văn bản sometextfile.txt
bằng lệnh đọc. Làm cách nào để thực hiện điều đó cho tệp Excel?
Làm cách nào để mở tệp là tệp Excel để đọc bằng Python?
Ví dụ, tôi đã mở các tệp văn bản sometextfile.txt
bằng lệnh đọc. Làm cách nào để thực hiện điều đó cho tệp Excel?
Câu trả lời:
Chỉnh sửa:
Trong phiên bản gấu trúc mới hơn, bạn có thể chuyển tên trang tính làm tham số.
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
Kiểm tra tài liệu để biết ví dụ về cách vượt qua sheet_name
:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html
Phiên bản cũ:
bạn cũng có thể sử dụng pandas
gói ….
Khi bạn đang làm việc với một tệp excel có nhiều trang tính, bạn có thể sử dụng:
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()
sẽ in 5 hàng đầu tiên của tệp Excel của bạn
Nếu bạn đang làm việc với tệp Excel với một trang tính, bạn chỉ cần sử dụng:
import pandas as pd
df = pd.read_excel(path + filename)
print df.head()
Hãy thử thư viện xlrd .
[Chỉnh sửa] - từ những gì tôi có thể thấy từ nhận xét của bạn, một cái gì đó giống như đoạn mã bên dưới có thể thực hiện một mẹo nhỏ. Tôi giả sử ở đây rằng bạn chỉ đang tìm kiếm một cột cho từ 'john', nhưng bạn có thể thêm nhiều hơn hoặc biến điều này thành một hàm chung chung hơn.
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)
Điều này không đơn giản như mở một tệp văn bản thuần túy và sẽ yêu cầu một số loại mô-đun bên ngoài vì không có gì được tích hợp sẵn để thực hiện việc này. Dưới đây là một số tùy chọn:
Nếu có thể, bạn có thể muốn xem xét xuất bảng tính excel dưới dạng tệp CSV và sau đó sử dụng mô-đun csv python tích hợp sẵn để đọc nó:
Có gói 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()
Bạn có thể sử dụng gói xlpython chỉ yêu cầu xlrd. Tìm nó ở đây https://pypi.python.org/pypi/xlpython và tài liệu về nó ở đây https://github.com/morfat/xlpython
Điều này có thể giúp:
Thao tác này tạo một nút lấy Danh sách 2D (danh sách các mục trong danh sách) và đẩy chúng vào bảng tính excel. đảm bảo IN [] có mặt hoặc sẽ ném và ngoại lệ.
đây là bản viết lại của nút động trong Revit excel cho excel 2013 vì nút đóng gói trước mặc định liên tục bị hỏng. Tôi cũng có một nút đọc tương tự. Cú pháp excel trong Python khá phức tạp.
thnx @CodingNinja - đã cập nhật:)
###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)
Bây giờ bạn có thể sử dụng sức mạnh của DataFrames gấu trúc!
pandas.read_excel
).