【業務自動化】Chapter2-2:表記ゆれの一斉置換ツールを作ろう

ながみえ

一つ前のページでは PyInstallerのインストール を行いました。

今回は実際の業務でも使える 表記ゆれの一斉置換ツール を作成していきましょう。

Chapter1:PythonでExcelを操作しよう
Chapter2:PyInstallerで自動化ツールを(.exe)作ろう
 ・Chapter2-1:Pythonスクリプトを実行ファイルに変換しよう
 ・Chapter2-2:表記ゆれを一瞬で直す置換マシンを作ろう ◁今回はここ
 ・Chapter2-3:置換の対象ファイルを増やそう
 ・Chapter2-4:エラー処理を追加しよう
 ・Chapter2-5:ダイアログウィンドウを追加しよう
Chapter3:便利な自動化ツールを5つ作ろう
Chapter4:Webスクレイピング入門
Chapter5:自動化ツールを作って稼ごう

業務で扱うExcelやテキストファイルの中には、同じ意味でも表記が異なる「表記ゆれ」がよく見られます。

たとえば「メールアドレス」と「e-mailアドレス」、「株式会社〇〇」と「(株)〇〇」といったケースです。

人間が目で確認して修正するのは非常に手間がかかりますが、PythonとExcelを組み合わせれば、自動的に表記ゆれを一括で置換するツールを作ることができます。

この記事では、Excelにまとめた置換ルールをもとに複数のテキストファイルを一度に修正するPythonコードを書き、PyInstallerを用いて実行ファイル化まで行います。

プログラミング初心者でも理解できるように、コードの仕組みを丁寧に解説していきますので、実務で活用できる自動化ツール作りに挑戦してみましょう。

この記事で作成するのは最も基本的な「表記ゆれ一斉置換ツール」です。
Chapter2-3から2-5までの記事を通して、これをさらに堅牢かつ便利なツールへ改造していきますので、是非最後までご参照下さい。

<<前のページ

業務自動化の記事一覧

次のページ>>

Excel連携で表記ゆれ一括置換ツールを作成しよう

ここでは、Excelにまとめた「検索する言葉」と「置換後の言葉」を読み込み、指定したフォルダ内のテキストファイルに一斉に適用するスクリプトを紹介します。

これにより、複数ファイルを対象にした表記ゆれの修正を、自動かつ効率的に行うことが可能になります。

今回の学習で使用するxlsxファイルとtxtファイルを配布しますので、↓↓のダウンロードリンクをクリックして適切な場所に保存して下さい。

Q
ファイルの保存場所について

ダウンロードしたファイルは以下の階層になるように保存して下さい。

この理由については、Chapter2-1 の記事で詳しく解説しています。

Chap2/   					# チャプター2全体の保存フォルダ
│
├── Chap2-1/				# チャプター2-1の保存フォルダ
│   ├── Chapter2-1.py
│   ├── Workbooks/
│   │   └── Chapter2-1.xlsx
│   └── Chapter2-1.exe
│
├── Chap2-2/				# チャプター2-2の保存フォルダ
│   ├── Chapter2-2.py
│   ├── Workbooks/
│   │   └── Chapter2-2.xlsx
│   ├──texts/
│   │   └── サンプルテキスト.txt
│   └── Chapter2-1.exe
│
├── Chap2-3/
├── ・・・
【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

表記ゆれ置換ツールのサンプルスクリプト

まずは、表記ゆれを一括で置換するためのPythonスクリプトを見てみましょう。

Excelファイルに置換ルールを記入し、それを参照してテキストファイルを処理する流れになっています。

以下がサンプルコードです。

import openpyxl     # xlsxを読み取るための外部モジュール
import pathlib      # ファイルやフォルダのパスを扱うための標準モジュール
import sys          # 実行環境を判定するために使用(py または exe)

# 実行環境に応じて基準ディレクトリを決定(exeかpyファイルか)
if getattr(sys, 'frozen', False):
    BASE_DIR = pathlib.Path(sys.executable).parent  # exe で動いている場合
else:
    BASE_DIR = pathlib.Path(__file__).parent        # pyファイルとして動いている場合
file_path = BASE_DIR / "workbooks" # Excelファイルを格納するフォルダ
text_path = BASE_DIR / "input_files"     # テキストファイルを格納するフォルダ

# Excelファイルを読み込み、シートを選択
book = openpyxl.load_workbook(file_path / "Chapter2-2.xlsx")
sheet = book.active

# 置換リスト(Excelから読み込む検索語・置換語)の定義
READ_START_ROW_NO = 3   # データ読み込みを開始する行
OLD_WORD_COL_NO = 2     # 検索する文字列が書かれた列
NEW_WORD_COL_NO = 3     # 置換後の文字列が書かれた列
old_words = []          # 検索する文字列のリスト
new_words = []          # 置換後の文字列のリスト

# Excelから置換リストを読み込む
for i in range(READ_START_ROW_NO, sheet.max_row+1): # データが書かれた全ての行に対して
    old_word = sheet.cell(i, OLD_WORD_COL_NO).value # 検索語を読み取り
    if old_word is None:            # 検索語が空白なら
        break                       # 繰り返しを終了
    old_words.append(str(old_word)) # 検索語をリストに追加

    new_word = sheet.cell(i, NEW_WORD_COL_NO).value # 置換語を読み取り
    if new_word is None:            # 置換語が空白なら
        new_word = old_word         # 検索語をそのまま使う
    new_words.append(str(new_word)) # 置換語をリストに追加

# テキストファイルを処理
file_counter = 0
for target_file in text_path.glob("*.txt"): # フォルダ内の全てのテキストファイルに対して
    # 改行して置換開始の宣言
    print()
    print(f'{target_file.name}のテキストを置換します')
    # テキストファイルを読み込み、検索語を置換語に置き換え
    file_text = target_file.read_text(encoding = "UTF-8")
    for i in range(len(old_words)):
        file_text = file_text.replace(old_words[i], new_words[i])
    # 新しいファイルを作成
    new_file_path = target_file.parent / f"【表記ゆれ修正済み】{target_file.stem}.txt"
    new_file_path.write_text(file_text, encoding="UTF-8")
    file_counter += 1

# 改行して終了
print()
print(f'{file_counter}ファイル置換完了')
input("Enterキーでプログラムを終了します")

ダウンロードしたtextsファイルの中にはサンプルテキストが書かれたtxtファイルが2つ入っています。

このコードを実行すると、サンプルテキストの表記ゆれを修正した新たなtxtファイルが追加されますので確認して下さい。

サンプルスクリプトの解説|処理の流れと実装のポイント

このスクリプトのポイントを順を追って見ていきましょう。

必要ライブラリとフォルダ構成の設定

スクリプトの冒頭では、使用するライブラリをインポートし、処理対象となるフォルダを指定しています。

import openpyxl     # xlsxを読み取るための外部モジュール
import pathlib      # ファイルやフォルダのパスを扱うための標準モジュール
import sys          # 実行環境を判定するために使用(py または exe)

# 実行環境に応じて基準ディレクトリを決定(exeかpyファイルか)
if getattr(sys, 'frozen', False):
    BASE_DIR = pathlib.Path(sys.executable).parent  # exe で動いている場合
else:
    BASE_DIR = pathlib.Path(__file__).parent        # pyファイルとして動いている場合
file_path = BASE_DIR / "workbooks" # Excelファイルを格納するフォルダ
text_path = BASE_DIR / "input_files"     # テキストファイルを格納するフォルダ

# Excelファイルを読み込み、シートを選択
book = openpyxl.load_workbook(file_path / "Chapter2-2.xlsx")
sheet = book.active

まず初めに、必要なライブラリをインポートしています。

  • openpyxl:Excelファイルを読み書きするためのライブラリ
  • pathlib:ファイルやフォルダのパス操作をOSに依存せず行えるライブラリ
  • sys:実行環境の情報を取得するための標準ライブラリ

その後、実行環境ごとの基準パス設定します。

  • PyInstallerでexe化した場合は sys.executable を使って実行ファイルの場所を基準にします。
  • Pythonスクリプトとして動かす場合は __file__ を基準にします。

この仕組みによって、Pythonスクリプトでもexeファイルでも同じように動作します。

その後、ここまでの学習内容と同様、ファイルの保存フォルダを指定し、 Chapter2-2.xlsx を読み込んでいます。

置換ルール表の行・列(開始行・列番号)の指定

ここでは、Excelから置換ルールを読み込むための「開始位置」と「格納先リスト」を準備しています。

# 置換リスト(Excelから読み込む検索語・置換語)の定義
READ_START_ROW_NO = 3   # データ読み込みを開始する行
OLD_WORD_COL_NO = 2     # 検索する文字列が書かれた列
NEW_WORD_COL_NO = 3     # 置換後の文字列が書かれた列
old_words = []          # 検索する文字列のリスト
new_words = []          # 置換後の文字列のリスト

この部分は「どこから」「どの列を参照して」ルールを読み込むかを決める、大事な下準備です。

次の処理で、Excelの内容を実際にこれらのリストへ追加していきます。

Excelのルール表の読み込み|検索語・置換語の取得

次のコードでは、Excelファイルの内容を1行ずつ読み取り、検索語と置換語をリストに格納しています。

# Excelから置換リストを読み込む
for i in range(READ_START_ROW_NO, sheet.max_row+1): # データが書かれた全ての行に対して
    old_word = sheet.cell(i, OLD_WORD_COL_NO).value # 検索語を読み取り
    if old_word is None:            # 検索語が空白なら
        break                       # 繰り返しを終了
    old_words.append(str(old_word)) # 検索語をリストに追加

    new_word = sheet.cell(i, NEW_WORD_COL_NO).value # 置換語を読み取り
    if new_word is None:            # 置換語が空白なら
        new_word = old_word         # 検索語をそのまま使う
    new_words.append(str(new_word)) # 置換語をリストに追加

この仕組みによって、Excelの「B列」「C列」に入力されたデータがすべてPythonのリストに取り込まれ、後のテキスト置換処理で活用できるようになります。

テキストファイルを一括処理して置換する

ここでは、対象フォルダ内のテキストファイルを順番に読み込み、Excelで定義した置換ルールを適用しています。

# テキストファイルを処理
file_counter = 0
for target_file in text_path.glob("*.txt"): # フォルダ内の全てのテキストファイルに対して
    # 改行して置換開始の宣言
    print()
    print(f'{target_file.name}のテキストを置換します')
    
    # 対象のテキストファイルの中身を読み込み(UTF-8でデコード)
    file_text = target_file.read_text(encoding = "UTF-8")
    
    # old_words/new_words のペアを使って文字列を順番に置換していく
    for i in range(len(old_words)):
        file_text = file_text.replace(old_words[i], new_words[i])
        
    # 新しいファイルを作成
    new_file_path = target_file.parent / f"【表記ゆれ修正済み】{target_file.stem}.txt"
    new_file_path.write_text(file_text, encoding="UTF-8")

    file_counter += 1

glob()メソッド は、pathlib.Path オブジェクトのメソッドで、指定したパターンに一致するファイルやディレクトリを取得するために使います。

このコードの場合、textsフォルダの中にある .txt で終わるファイルを全部取得し、for文で1つずつ処理します。

read_text()メソッドwrite_text()メソッド は、ファイルの中身を文字列として読み込み・書き込みするメソッドです。

そして replace()メソッド は Pythonの文字列メソッドで、「指定した部分文字列を、別の文字列に置き換える」 処理を行います。

処理結果の表示とプログラムの終了

最後に、すべてのファイルの置換が終わったことをユーザーに知らせ、結果を確認できるようにしています。

# 改行して終了
print()
print(f'{file_counter}ファイル置換完了')
input("Enterキーでプログラムを終了します")

最後にinput()関数をしようすることで、ユーザーが Enterキー を押すまでプログラムを終了しない(ウィンドウが閉じない)ようにしています。

これにより、処理結果が一瞬で消えてしまうのを防ぎツールが起動したことを体感的にも分かりやすくしています。

【Python】勉強猫がノートパソコンを見ながら考え込む様子。記事内の休憩用イラスト

PyInstallerで実行ファイル化|配布用ビルド手順

前の記事で PyInstallerの基本操作 は学習しました。

作成した表記ゆれ置換ツールを「Pythonが入っていない環境でも使えるアプリ」に変換していきましょう。

ビルドコマンドの実行と主なオプション

ターミナルやコマンドプロンプトを開き、スクリプトが保存されているフォルダへ移動します。

そのうえで次のコマンドを実行してください。

pyinstaller Chapter2-2.py --onefile

このコマンドを実行すると、数分程度の処理の後に distフォルダ の中に Chapter2-2.exe が生成されます。

workbooksファイルやtextsファイルとの位置関係が正しくなるように移動するのを忘れないでください。

実行ファイルの使い方と配布時の注意点

生成された .exe ファイルを実行すると、PythonをインストールしていないPCでも表記ゆれ置換ツールとして使うことができます。

先ほどスクリプト実行時に生成された【表記ゆれ修正済み】サンプルテキスト.txtを削除して実行してみましょう。

また、もしこのツールを同僚やチームで共有する場合は、以下の点に気をつけてください。

  • exe ファイルと一緒に workbookstexts フォルダをセットで渡すこと。
  • Excelファイル(置換ルール)は誤って削除されないよう、あらかじめテンプレートを用意しておくと安心。
  • ウイルス対策ソフトが警告を出す場合があるため、社内利用の場合は事前に説明しておくこと。

まとめ|表記ゆれ一斉置換ツールのひな型完成

この記事ではExcelにまとめた置換ルールを使って、複数のテキストファイルに含まれる表記ゆれを自動で修正するPythonツールを作成しました。

今回紹介した仕組みは、文章の表記統一だけでなく、業務マニュアルや顧客データなどにも応用できます。

表記ゆれの修正は地味ながら多くの現場で必要とされる作業なので、ぜひ自分の職場や学習の中で活用してみてください。

次の記事ではこのツールをさらに拡張し、処理対象のファイル形式を選択できるようにする方法を解説します。

より実用性の高い自動化アプリへ進化させていきましょう。

もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいExcel自動化学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

業務自動化の記事一覧

次のページ>>

次のステップ:業務自動化を「実務レベル」まで引き上げたい方へ

このコース(Chapter1〜2)の無料教材では、Python と Excel(openpyxl)を使って「単純作業を自動化する」ための基本的な考え方やコードの書き方を身につけることができます。

ただ、実際の業務で使おうとすると、次のような壁にぶつかりがちです。

  • 社内で使える「ちゃんとしたツール」っぽい形にしたい
  • エラーが出たときに、自分で原因を特定して直せない
  • 副業したくても本当に正しく動くか自信がない

そこで、格安で販売中のChapter3以降では「現場でそのまま使える業務自動化スクリプト」を作りながら学べる構成としました。

そこでは、Chapter2までで学んだ内容を土台にしつつ、

  • 実務でよくあるパターン別のサンプルコード
  • トラブルシューティング(エラーの潰し方)の考え方
  • より高度な自動化を実現するWebスクレイピングの基本
  • 業務自動化スキルを用いて副業で稼ぐための具体的な方法

などを通して、「自分の職場に合わせてカスタマイズできる力」を身につけることを目指します。

教材は↓↓のリンクボタンの販売所で購入するとPDFやpyファイルでダウンロードできます。

もしくは、各学習記事内で会員登録して頂くと、そのままこのサイト内で全ての記事を読めるようになります。

どこよりも安く手実践的なこの教材を、是非ご活用下さい^^

記事URLをコピーしました