2010-05-31 15 views
81

Jaki jest najlepszy sposób odczytać Excel (XLS) plików z Python (nie CSV plików).Reading/parsowania Excel (XLS) plików z Pythonem

Czy jest wbudowany w pakiet, który jest domyślnie obsługiwany w Pythonie, aby wykonać to zadanie?

+1

możliwy duplikat [Jakie biblioteki należy użyć do napisania XLS z Linuksem/Python?] (Http://stackoverflow.com/questions/245225/which-library-sould-i-use-to-write-an-xls-from-linux-pyt hon) – voyager

+13

@voyager: chce czytać pliki, nie zapisywać ich. –

Odpowiedz

1

Można użyć dowolnego z bibliotek listed here (jak Pyxlreader, który jest oparty na JExcelApi lub xlwt), plus COM automation to use Excel itself do odczytu plików, ale które wprowadzają Office jako zależność oprogramowania, co może nie zawsze jest opcją.

+6

(1) pyxlreader to absolutna ospa. Nigdy tego nie próbowałeś. Zobacz moje komentarze tutaj: http://stackoverflow.com/questions/1243545/programmatically-extract-data-from-an-excel-spreadsheet (2) 'xlwt' pliki WriTes; użyj 'xlrd' do plików ReaD. –

70

Gorąco polecam xlrd do czytania .xls plików.

voyager wspomniał o zastosowaniu automatyzacji COM. Robiąc to sam kilka lat temu, ostrzegam, że robienie tego to prawdziwa PITA. Liczba zastrzeżeń jest ogromna, a dokumentacji brakuje i denerwuje. Wpadłem na wiele dziwnych błędów i potknięć, z których niektóre zajęły wiele godzin.

AKTUALIZACJA: Dla nowszych plików .xlsx zalecaną biblioteką do odczytu i zapisu wydaje się być openpyxl.

+3

W przypadku plików Excel 2007+ ('.xlsx') prawdopodobnie używałbyś [OpenPyXL] (http://openpyxl.readthedocs.org/). –

1

Można również rozważyć prowadzenie (non-python) xls2csv programu. Nakarm go plikiem xls, a powinieneś otrzymać csv.

+3

Ale plakat mówi, że musi przeczytać w języku Python ... Sugerujesz uruchomienie 'xls2csv', a następnie parsowanie' csv' z Pythona? – Hbcdev

+0

Python-excelerator zawiera wykonywalny wrapper py_xls2csv wokół konwertera Pythona. –

0

Dla starszych Excel nie jest OleFileIO_PL module że może odczytać formatu pamięci o strukturze OLE używany.

9

pyton xlrd biblioteka może lepszym rozwiązaniem dla tego problemu

import xlrd 

otworzyć skoroszyt

workbook = xlrd.open_workbook('your_file_name.xlsx') 

otwarty arkusz przez nazwa

worksheet = workbook.sheet_by_name('Name of the Sheet') 

otwarty arkusz indeksem

worksheet = workbook.sheet_by_index(0) 

odczytać wartość komórki

worksheet.cell(0, 0).value  
13

Korzystanie pandy:

import pandas as pd 

xls = pd.ExcelFile("yourfilename.xls") 

sheetX = xls.parse(2) #2 is the sheet number 

var1 = sheetX['ColumnName'] 

print(var1[1]) #1 is the row number... 
Powiązane problemy