2016-07-11 29 views
1

python xlrdを使用して、特定のシートの列のすべての行にアクセスする方法はありますか?列名とシート名で列データを取得

例えば:

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

または私は自分で辞書を作成することがありますか?

Excelはので、私はこのスクリプトはdictinnariesのリストにXLSファイルをtrasformすることができ、すべてのCOLNAMES /シート

答えて

4

はい、col_values()ワークシートメソッドを探しています。 columnindexが列の数である代わり

arrayofvalues = sheet['columnname'] 

のあなたは(ゼロからカウントするので、列Aは、インデックス0で、列Bは、インデックス1、等である)

arrayofvalues = sheet.col_values(columnindex) 

を行う必要があります。最初の行(または最初の数行)にわかりやすい見出しがある場合は、どの行を開始するかを示す2番目のパラメータを指定できます(ゼロから数えます)。あなたが1つのヘッダ行を持っているので、2行目の開始値をしたい場合たとえば、あなたは

arrayofvalues = sheet.col_values(columnindex, 1) 

を行うことができxlrdパッケージの合理的に読める議論のためtutorialをチェックしてみて下さい。 (は読むのが難しいです)

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

2

を反復処理を回避するのが大好きだ、かなり大きい、 リスト内のすべての辞書は

行を表します
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 
関連する問題