質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.69%

【開発初心者です】Python でエクセルファイルの読み込みをしたいのですが、、

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 803

yusu222

score 10

経験の浅い初心者です。
あるプログラムにおいて、csvファイルを読み込む作業を行なってきましたが、
諸事情によりexcelファイル(.xlsl)を読み込む作業に書き換えることとなりました。

実現したいこと

excelファイルの読み込みを辞書形式で行う。

読み込むexcelファイルは以下の様な内容となっています。

No. 項目1  項目2  項目3
1  数値   数値   数値
2  数値   数値   数値
3  数値   数値   数値

該当のソースコード

これまでcsvファイルの読み込みを行なっていたコードは以下の通りです。

with open(filename, 'r') as f:
    reader = csv.DictReader(f)
    for row in reader:
        PARAMS.TABLE.append(row)


このコードを書き換えたいのですが、書き方が分かりません。

試したこと

中途半端なコードですが、以下の様にopenpyxlを使用して書き換えようと考えています。
ですが、辞書形式で読み込む方法が分かりません。
ご教授よろしくお願い致します。

import openpyxl

f = openpyxl.load_workbook(filename)

active_sheet = f.active
for row in active_sheet.rows:
    for cell in row:
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

辞書形式に読み込みたいということで、以下のような入力・出力を想定してコードを作成しました。

<入力>

No. 項目1  項目2  項目3
1  10     20    30
2  40     50    60
3  70     80    90

<出力>

{'項目1': {1: 10, 2: 40, 3: 70}, '項目2': {1: 20, 2: 50, 3: 80}, '項目3': {1: 30, 2: 60, 3: 90}}

実行環境は以下のとおりです。
・言語:python3
・OS:windows10
・エディタ:jupyter notebook
・読み込み用excelファイル:xlsx拡張子()

<コード>

import openpyxl

f=openpyxl.load_workbook('test.xlsx')

active_sheet=f.active

dict={}#事前に空の辞書を定義

###行の終わりを検索
count=1
while(1):
    if active_sheet.cell(row=count,column=1).value == None:#セルの中身が空白ならば
        row_end=count-1#行の終わりを取得
        break#取得したらwhile文を抜ける
    count+=1

###列の終わりを検索
count=1
while(1):
    if active_sheet.cell(row=1,column=count).value==None:#セルの中身が空白ならば
        col_end=count-1#列の終わりを取得
        break
    count+=1

###セルの読み込み・辞書への挿入
for c in range(1,col_end):#列に関するfor文
    item=active_sheet.cell(row=1,column=c+1).value#項目の読み込み
    dict[item]={1:0}#事前にキーを作っておかないとエラーになる
    for r in range(1,row_end):#行に関するfor文
        num=active_sheet.cell(row=r+1,column=1).value#番号の読み込み
        valu=active_sheet.cell(row=r+1,column=c+1).value#数値の読み込み
        dict[item][num]=valu#辞書に番号・数値を挿入
print(dict)

読み込むファイル(表)の大きさが異なる場合を想定して、行終わり・列終わりの検索を加えています。コード的に冗長なので、表の大きさが一定ならば消してもらって構いません。

各セル内容の読み込みについては、以下のコードからできます。

num=active_sheet.cell(row='行番号',column='列番号').value#番号の読み込み

その他、openpyxlを使った基本的なエクセル操作については以下のリンクをご参照ください。
Qiita:【Python】OpenPyXLでExcelを自動操作する

また、R.Shigemori氏の言う通り、Pandasを使ってエクセルを操作する方法もあります。詳しくは以下のリンクをご参照ください。
Qiita:まだExcelで消耗してるの?Pythonによる自動集計ガイド 基礎編

以上、長文になりましたが、ご参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/09 22:05

    ご丁寧な回答ありがとうございます。
    無事解決しました。
    リンクも大変参考になりました。

    キャンセル

+1

pandasを使うと簡単かと思います。

import pandas as pd
data=pd.read_excel(filename) #file読んで、DataFrame形式にする
data_dict=data.to_dict() #Dataframeを辞書型に変換

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/09 22:03

    回答ありがとうございます。
    確かにpandasの方が書きやすそうですね。
    参考になります。

    キャンセル

-5

残念ながら、エクセルのファイルはpythonでは読めません
「python Excel」でぐぐってみれば、どういう雰囲気かわかると思いますです

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.69%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる