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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

997閲覧

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

yusu222

総合スコア12

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/04/06 12:19

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

実現したいこと

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

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

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

該当のソースコード

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

python

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

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

試したこと

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

python

1import openpyxl 2 3f = openpyxl.load_workbook(filename) 4 5active_sheet = f.active 6for row in active_sheet.rows: 7 for cell in row: 8

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

<入力>

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/07 01:52

amahara_waya

総合スコア1029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yusu222

2019/04/09 13:05

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

0

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

python

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

投稿2019/04/06 21:53

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yusu222

2019/04/09 13:03

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

0

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

投稿2019/04/06 12:47

編集2019/04/06 13:12
y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問