Python3でExcelファイルを読み込んでみよう

はじめに

バディットコンサルティングのITエンジニア wahooです。
今日は、Python3を使って、Excelファイルの内容を読み込んで、セルに入力されている値を処理して、テキストファイルに保存してみようと思います。

Python3のインストール

Windows上で、Pythonが使えるようにインストールをしていきます。
まずは、次のサイトからPython3のインストールファイルをダウンロードします。

Python Releases for Windows
The official home of the Python Programming Language
Python-Download
Python-Download

OSにより、64bitか32bitのインストーラーを選んでダウンロードします。
ダウンロードが終わったら、実行して、インストールをしていきます。

Python-Install
Python-Install

インストールの最初に、PythonのPATHを追加するチェックをつけて、インストールを開始します。

Python-Install-Close
Python-Install-Close

これで、Python3のインストールができました。「Close」で、終了します。

Excelファイルの読み書きをするためのパッケージのインストール

Excelファイルの読み書きをするために必要なPythonパッケージのインストールをしていきます。
必要なパッケージは、「pandas」と「xlrd」になります。
また、インストールには、インターネット接続が必要です。

pandasのインストール

コマンドプロンプトを起動して、コマンドを使って、インストールしていきます。
次のコマンドを実行すると、インストールすることができます。

>pip install pandas

※pipコマンドのアップグレードの注意が表示された場合、表示されたメッセージ通りにコマンドを実行します。

>python -m pip install --upgrade pip

xlrdのインストール

次のコマンドを実行すると、インストールすることができます。

>pip install xlrd

Pythonプログラミング

環境が整ったので、さっそく簡単にプログラミングをしていきます。

Excelファイル

テスト用に、次のようなExcelファイルを用意しました。

Python-Excel
Python-Excel

Pythonプログラム

今回は、テスト用に用意したExcelファイルを読み込んで、コマンドラインに表示して、「EEE」列に入力されているテキストの最初の「-」までを先頭にした「xxxtest.txt」に決まったテキストを出力する様にしてみました。

# ライブラリ/パッケージのインポート
import os
import glob
import pandas as pd

# remove_glob関数
def remove_glob(pathname, recursive = True):
    for p in glob.glob(pathname, recursive = recursive):
        if os.path.isfile(p):
            os.remove(p)

# default_file_output関数
def default_file_output(file):
    file.write('! test config\n')
    return 0

# Excelファイルの読み込み
df = pd.read_excel('test.xlsx')

# Excelファイルの画面出力
print(df)

# 出力テキストファイル名
filename = 'test.txt'

# 出力テキストファイルの削除
fn = '*' + filename
remove_glob(fn)

# Excelファイルを行単位で処理
i = -1
for row in df.values:
    i = i + 1
    if 2 <= i <= 11:
        if int(row[0]) > 0:
            # 出力テキストファイル名
            fn = row[5].split('-')[0] + filename
            # 出力テキストファイルのオープン
            with open(fn, mode = 'a') as f:
                # 出力テキストファイルの書き込み
                default_file_output(f)

こんなプログラムを作ってみました。

Microsoft Windows [Version 10.0.17134.1184]
 (c) 2018 Microsoft Corporation. All rights reserved.
 X:\Users
Microsoft Windows [Version 10.0.17134.1184]
 (c) 2018 Microsoft Corporation. All rights reserved.
 X:\Users\0056562\Documents\Python>test.py
    Unnamed: 0 Test Excel Unnamed: 2 Unnamed: 3 Unnamed: 4   Unnamed: 5
 0         NaN        NaN        NaN        NaN        NaN          NaN
 1         No.        AAA        BBB        CCC        DDD          EEE
 2           1         a1       1000         10       1010  ABC-123-abc
 3           2         a2       2000         20       2020  ABC-456-abc
 4           3         a3       3000         30       3030  ABC-789-abc
 5           4         a4       4000         40       4040  DEF-123-abd
 6           5         a5       5000         50       5050  DEF-456-abe
 7           6         a6       6000         60       6060  DEF-789-abf
 8           7         a7       7000         70       7070  GHI-123-xy1
 9           8         a8       8000         80       8080  GHI-456-xy2
 10          9         a9       9000         90       9090  GHI-789-xy3
 11         10        a10      10000        100      10100  ABC-123-def
 12        NaN        NaN      55000        550      55550          NaN
 X:\Users\0056562\Documents\Python>
56562\Documents\Python>test.py Unnamed: 0 Test Excel Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5 0 NaN NaN NaN NaN NaN NaN 1 No. AAA BBB CCC DDD EEE 2 1 a1 1000 10 1010 ABC-123-abc 3 2 a2 2000 20 2020 ABC-456-abc 4 3 a3 3000 30 3030 ABC-789-abc 5 4 a4 4000 40 4040 DEF-123-abd 6 5 a5 5000 50 5050 DEF-456-abe 7 6 a6 6000 60 6060 DEF-789-abf 8 7 a7 7000 70 7070 GHI-123-xy1 9 8 a8 8000 80 8080 GHI-456-xy2 10 9 a9 9000 90 9090 GHI-789-xy3 11 10 a10 10000 100 10100 ABC-123-def 12 NaN NaN 55000 550 55550 NaN X:\Users
Microsoft Windows [Version 10.0.17134.1184]
 (c) 2018 Microsoft Corporation. All rights reserved.
 X:\Users\0056562\Documents\Python>test.py
    Unnamed: 0 Test Excel Unnamed: 2 Unnamed: 3 Unnamed: 4   Unnamed: 5
 0         NaN        NaN        NaN        NaN        NaN          NaN
 1         No.        AAA        BBB        CCC        DDD          EEE
 2           1         a1       1000         10       1010  ABC-123-abc
 3           2         a2       2000         20       2020  ABC-456-abc
 4           3         a3       3000         30       3030  ABC-789-abc
 5           4         a4       4000         40       4040  DEF-123-abd
 6           5         a5       5000         50       5050  DEF-456-abe
 7           6         a6       6000         60       6060  DEF-789-abf
 8           7         a7       7000         70       7070  GHI-123-xy1
 9           8         a8       8000         80       8080  GHI-456-xy2
 10          9         a9       9000         90       9090  GHI-789-xy3
 11         10        a10      10000        100      10100  ABC-123-def
 12        NaN        NaN      55000        550      55550          NaN
 X:\Users\0056562\Documents\Python>
56562\Documents\Python>
 X:\Users
 X:\Users\0056562\Documents\Python>tree /F
 フォルダー パスの一覧:  ボリューム PersistentDataDisk
 ボリューム シリアル番号は 9CBC-7C51 です
 X:.
     ABCtest.txt
     DEFtest.txt
     GHItest.txt
     test.py
     test.xlsx
 サブフォルダーは存在しません
 X:\Users\0056562\Documents\Python>
56562\Documents\Python>tree /F フォルダー パスの一覧: ボリューム PersistentDataDisk ボリューム シリアル番号は 9CBC-7C51 です X:. ABCtest.txt DEFtest.txt GHItest.txt test.py test.xlsx サブフォルダーは存在しません X:\Users
 X:\Users\0056562\Documents\Python>tree /F
 フォルダー パスの一覧:  ボリューム PersistentDataDisk
 ボリューム シリアル番号は 9CBC-7C51 です
 X:.
     ABCtest.txt
     DEFtest.txt
     GHItest.txt
     test.py
     test.xlsx
 サブフォルダーは存在しません
 X:\Users\0056562\Documents\Python>
56562\Documents\Python>

実行結果としては、「ABCtest.txt」「DEFtest.txt」「GHItest.txt」の3ファイルが作られて、それぞれ、「4行」「3行」「3行」 という結果となります。

まとめ

このくらいのことを実現するのは、思ったよりは、簡単でした。
Excelファイルの読み込みもパッケージがあるので、非常に簡単ですね。これで、Excelファイルで作られた資料を元に、別のテキストファイルや別のExcelファイルの作成ができると思います。
例えば、設計資料から各機器の設定ファイルの作成などに活用できるかなと思います。
ここから先は、Pythonでできることがたくさんあると思うので、色々な場面で使うことができるように、Pythonを学習していこうと思います。

では、また、次回!!

タイトルとURLをコピーしました