web-dev-qa-db-ja.com

列名とシート名で列データを取得する

python xlrd。を使用して、特定のシートの列のすべての行にアクセスする方法はありますか?.

例えば:

workbook = xlrd.open_workbook('ESC data.xlsx', on_demand=True)
sheet = workbook.sheet['sheetname']
arrayofvalues = sheet['columnname']

または、自分で辞書を作成する必要がありますか?

Excelはかなり大きいので、すべての列/シートの繰り返しを避けたい

7
Sillyreduction

はい、col_values()ワークシートメソッドを探しています。の代わりに

arrayofvalues = sheet['columnname']

あなたがする必要があります

arrayofvalues = sheet.col_values(columnindex)

ここで、columnindexは列の番号です(ゼロからカウントするため、列Aはインデックス0、列Bはインデックス1など)。最初の行(または最初の数行)に説明的な見出しがある場合は、2番目のパラメーターを指定して、どの行から開始するか(再び、ゼロからカウント)を指定できます。たとえば、1つのヘッダー行があり、2番目の行から値を開始する場合、次のようにできます。

arrayofvalues = sheet.col_values(columnindex, 1)

xlrdパッケージの合理的に読みやすい議論については、 tutorial をチェックしてください。 (公式の xlrd documentation は読みにくいです。)

また、(1)arrayofvaluesという名前を自由に使用できますが、実際に得られるのはPythonリストであり、技術的には配列ではありません。 2)on_demandワークブックパラメータは、.xlsxファイルを使用する場合は効果がありません。つまり、xlrdは、ワークブック全体をメモリにロードしようとします。 (on_demand機能は.xlsファイルに対して機能します。

10
John Y

このスクリプトにより、xlsファイルを辞書のリストに変換できます。リスト内のすべての辞書は行を表します

import xlrd

workbook = xlrd.open_workbook('esc_data.xlss')
workbook = xlrd.open_workbook('esc_data.xlsx', on_demand = True)
worksheet = workbook.sheet_by_index(0)
first_row = [] # Header
for col in range(worksheet.ncols):
    first_row.append( worksheet.cell_value(0,col) )
# tronsform the workbook to a list of dictionnaries
data =[]
for row in range(1, worksheet.nrows):
    Elm = {}
    for col in range(worksheet.ncols):
        Elm[first_row[col]]=worksheet.cell_value(row,col)
    data.append(Elm)
print data
4
khelili miliana