PythonでExcel(XLS)ファイルを読み取る最良の方法は何ですか( CSV ファイルではありません)。
このタスクを実行するためにPythonでデフォルトでサポートされている組み込みパッケージはありますか?
パンダの使用:
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...
いずれかを選択できます http://www.python-Excel.org/
_python xlrdライブラリをお勧めします。
を使用してインストールする
pip install xlrd
を使用してインポート
import xlrd
ワークブックを開く
workbook = xlrd.open_workbook('your_file_name.xlsx')
名前でシートを開く
worksheet = workbook.sheet_by_name('Name of the Sheet')
インデックスでシートを開く
worksheet = workbook.sheet_by_index(0)
セル値を読み取る
worksheet.cell(0, 0).value
任意のライブラリを使用できます ここにリストされています (JExcelApiに基づく Pyxlreader 、または xlwt など)、さらに COMオートメーションExcel自体を使用する ファイルの読み取りに使用しますが、そのためにOfficeをソフトウェアの依存関係として導入していますが、これは常にオプションとは限りません。
Xlsxの場合、以前に https://stackoverflow.com/questions/4371163/reading-xlsx-files-using-python として投稿されたソリューションが気に入っています。標準ライブラリのモジュールのみを使用しています。
def xlsx(fname):
import zipfile
from xml.etree.ElementTree import iterparse
z = zipfile.ZipFile(fname)
strings = [el.text for e, el in iterparse(z.open('xl/sharedStrings.xml')) if el.tag.endswith('}t')]
rows = []
row = {}
value = ''
for e, el in iterparse(z.open('xl/worksheets/sheet1.xml')):
if el.tag.endswith('}v'):
value = el.text
if el.tag.endswith('}c'):
if el.attrib.get('t') == 's':
value = strings[int(value)]
letter = el.attrib['r']
while letter[-1].isdigit():
letter = letter[:-1]
row[letter] = value
value = ''
if el.tag.endswith('}row'):
rows.append(row)
row = {}
return rows
追加された改善点は、シート名でコンテンツを取得し、reを使用して列を取得し、共有文字列が使用されているかどうかを確認することです。
def xlsx(fname,sheet):
import zipfile
from xml.etree.ElementTree import iterparse
import re
z = zipfile.ZipFile(fname)
if 'xl/sharedStrings.xml' in z.namelist():
# Get shared strings
strings = [element.text for event, element
in iterparse(z.open('xl/sharedStrings.xml'))
if element.tag.endswith('}t')]
sheetdict = { element.attrib['name']:element.attrib['sheetId'] for event,element in iterparse(z.open('xl/workbook.xml'))
if element.tag.endswith('}sheet') }
rows = []
row = {}
value = ''
if sheet in sheets:
sheetfile = 'xl/worksheets/sheet'+sheets[sheet]+'.xml'
#print(sheet,sheetfile)
for event, element in iterparse(z.open(sheetfile)):
# get value or index to shared strings
if element.tag.endswith('}v') or element.tag.endswith('}t'):
value = element.text
# If value is a shared string, use value as an index
if element.tag.endswith('}c'):
if element.attrib.get('t') == 's':
value = strings[int(value)]
# split the row/col information so that the row leter(s) can be separate
letter = re.sub('\d','',element.attrib['r'])
row[letter] = value
value = ''
if element.tag.endswith('}row'):
rows.append(row)
row = {}
return rows
(非Python)プログラムxls2csvの実行を検討することもできます。 xlsファイルをフィードすると、csvが返されます。
Python Exceleratorもこのタスクを処理します。 http://ghantoos.org/2007/10/25/python-pyexcelerator-small-howto/
DebianおよびUbuntuでも利用可能です。
Sudo apt-get install python-excelerator
古いExcelファイルには、使用されるOLE構造化ストレージ形式を読み取ることができる OleFileIO_PLモジュール があります。