python xlrd。を使用して、特定のシートの列のすべての行にアクセスする方法はありますか?.
例えば:
workbook = xlrd.open_workbook('ESC data.xlsx', on_demand=True)
sheet = workbook.sheet['sheetname']
arrayofvalues = sheet['columnname']
または、自分で辞書を作成する必要がありますか?
Excelはかなり大きいので、すべての列/シートの繰り返しを避けたい
はい、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ファイルに対して機能します。
このスクリプトにより、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