【業務自動化】チャプター2-3:置換するファイル形式を選択式にしよう

ながみえ
本記事には広告(アフィリエイトリンク)が含まれます。リンク経由で申込が発生した場合、当サイトが報酬を受け取る可能性があります。

一つ前のページでは 表記ゆれ置換ツール を作成しました。

今回は 置換対象ファイルをCSVにも拡張 しましょう。

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

前回の記事では、Excelで管理している「表記ゆれリスト」を使い、テキストファイル内の用語を一括で置換するツールを作成しました。

しかし、実務では扱うデータが必ずしもテキストファイルとは限りません。

CSVファイル(例えば顧客リストや取引履歴など)を対象に同様の置換を行いたい場面もよくあります。

そこで今回の記事では、ユーザーが処理対象のファイル形式(txt / csv)を選べるようにし、CSVにも対応したツールに改良する方法を学びます。

新しく導入する ライブラリはPyInputPlus です。これは入力値をチェックしながら受け付ける外部モジュールで、ユーザーに誤った入力をさせない仕組みを簡単に追加できます。

記事を読み終える頃には、以下のようなスキルが身についているでしょう。

  • 既存のコードを拡張して機能を追加する手順
  • PyInputPlusを使った選択式メニューの作成
  • CSVファイルをPythonで安全に読み書きする方法

本記事は前半は無料後半は会員向けの有料記事です。
業務自動化の全ての記事セットが今だけ 1980円 ⇒ 980円。
どこよりも安いこの教材を、是非ご活用下さい^^

Q
もくじ

青字は無料部分。白字は会員向け部分です。

  1. 新規モジュールの基本|PyInputPlusとcsvモジュール
  2. 置換ツールをCSV対応に改良|選択して一括置換
    • サンプルスクリプトの全体像(txt/CSV選択〜一括置換)
    • サンプル解説|inputChoice()導入とCSVセル置換の追加点
  3. PyInstallerでツール化・まとめ
    • PyInstallerでスクリプトをツール化しよう
    • まとめ

どこよりも安いこの教材を、是非ご活用下さい。

<<前のページ

業務自動化の記事一覧

次のページ>>

新規モジュールの基本|PyInputPlusとcsvモジュール

サンプルスクリプトを紹介する前に、今回の記事で新たに登場する2つのモジュール、pyInputPlusとcsvを紹介します。

あわせて読みたい
openpyxl使える関数・メソッド・クラス一覧【Excel自動化の基本リファレンス】
openpyxl使える関数・メソッド・クラス一覧【Excel自動化の基本リファレンス】
【Python】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

pyInputPlusモジュールの紹介

PyInputPlusモジュール は、Python の外部ライブラリで、input()関数を拡張して入力の検証や制御を簡単に行えるようにしたものです。

ユーザーからの入力に対して、型チェック・範囲指定・再入力制御などを組み込みでサポートします。

例えば、pyInputPlusモジュールに含まれる inputInt()関数 を使って入力をすると、入力値が整数でなかった場合は自動的にエラーを出して再入力を促します。

つまり、ユーザーが文字列や浮動小数点数などを入れても、勝手に int()変換エラーで落ちることはなく、エラーメッセージを表示してもう一度入力待ちに入ります。

PyInputPlusのインストール手順とサンプルコード

コマンドプロンプトに以下のコードを打ち込んで、pyinputplusをインストールしましょう。

pip install pyinputplus

インストールができたら、以下のコードをコピーして実行し、いろいろな入力を試してみて下さい。

通常の input()関数より安全(型変換エラーや不正値を防げる)であり、再入力処理のロジックを自分で書かなくて済む点を体感しましょう。

import pyinputplus

# 整数入力(1~10の範囲)
age = pyinputplus.inputInt("年齢を入力してください (1-10): ", min=1, max=10)
print(f"あなたの年齢: {age}")

# 選択肢から入力
fruit = pyinputplus.inputChoice(['apple', 'banana', 'orange'])
print(f"選ばれたフルーツ: {fruit}")

# Yes/No 入力
proceed = pyinputplus.inputYesNo("続行しますか? (yes/no): ")
if proceed == "yes":
    print("続行します!")
else:
    print("終了します。")

PyInputPlus 関数一覧表

PyInputPlusに含まれる主要な関数を、表形式で整理します。

関数名説明
inputStr()文字列入力を受け付ける
inputNum()数値(整数または浮動小数点)を受け付ける
inputInt()整数入力を受け付ける
inputFloat()浮動小数点入力を受け付ける
inputChoice()指定した選択肢から入力させる
inputYesNo()Yes / No の入力を受け付ける(yes/no, y/n)
inputBool()真偽値の入力を受け付ける(true/false, yes/no, 1/0)

自動化ツールを作る際には非常に便利ですので、是非使用していきましょう。

csvモジュールの基本|reader/writerでセル単位の置換

csvモジュール は、Pythonに標準で搭載されている(追加インストール不要)モジュールで、CSVファイル の読み書きを簡単に行うためのツールです。

主な特徴は以下の通りです。

  • テキストファイル形式の CSVファイルを行ごとに読み書き できる
  • 区切り文字(デフォルトは ,)を自由に指定可能(タブ区切りやセミコロン区切りも対応)
  • readerwriter による基本操作

csv.readerの使い方|UTF-8 / BOMなど文字コードの扱い

例えば、単純にCSVファイルを読み込むコードは以下のようになります。

import csv

# CSVファイルを読み込む
with open("data.csv", newline="", encoding="utf-8-sig") as f:	# UTF-8(BOM付き)でファイルを開く
    reader = csv.reader(f)  # リーダーオブジェクトを作成
    rows = [row for row in reader]  # 行をリストに格納

print(rows)

このコードはdata.csvを読み込み、その中身のデータを変数rowsに格納して出力しています。

1.with open(“data.csv”, newline=””, encoding=”utf-8-sig”) as f:

  • "data.csv" というファイルを開いて、変数 f にファイルオブジェクトを代入します。
  • newline="" は改行コードを自動で変換しないようにする設定です。余計な空行が入らないようにするために指定します。
  • encoding="utf-8-sig" はファイルがUTF-8(BOM付き)で保存されている場合でも正しく読み込めるようにする設定です。

この行によって、CSVファイルの中身を読み取れる準備が整います。

2.reader = csv.reader(f)

  • ファイルオブジェクト f を元に、csv.reader を使って CSVの各行を順番に取り出せるオブジェクト を作ります。
  • このオブジェクトからは「1行ずつ」データを取り出せます。
  • 1行は「リスト」として返されます(列ごとに要素が分かれる)。

3.rows = [row for row in reader]

  • reader から全ての行を取り出して、リストにまとめています。
  • これは「リスト内包表記」と呼ばれる書き方で、for row in reader を回して取り出した row を1つの大きなリストに格納します。

結果として rows は「リストの中にリストが入っている形(二次元リスト)」になります。

csv.writerの使い方|安全な上書き防止と新規ファイル出力

単純にCSVファイルに書き込むコードは以下のようになります。

import csv

# 書き込みたいデータ(2次元リスト)
rows = [
    ["名前", "年齢", "出身地"],
    ["太郎", "20", "東京"],
    ["花子", "25", "大阪"]
]

# CSVに書き込み
with open("output.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.writer(f)   # writerオブジェクトを作成
    writer.writerows(rows)   # まとめて書き込み

このコードはoutput.csvを読み込み、変数rowsのデータを書き込んでいます。

1.with open(“output.csv”, “w”, newline=””, encoding=”utf-8-sig”) as f:

  • "output.csv" という名前で新しいファイルを「書き込みモード ("w")」で開きます。
  • newline="" は改行コードを正しく扱うための指定です。
  • encoding="utf-8-sig" にすることで、Excelで開いたときに文字化けを防げます。

2.writer = csv.writer(f)

  • 書き込み専用の writer オブジェクトを作成します。
  • このオブジェクトを使うことで、リストの内容をCSV形式に変換してファイルに書き込めるようになります。

3.writer.writerows(rows)

  • writerows() は 複数行のリストを一度に書き込む メソッドです。
  • rows を渡すと、1つのリストを1行として順に書き込みます。

置換ツールをCSV対応に改良|選択して一括置換

まずは、これまでテキストファイルのみを対象にしていた表記ゆれ一斉置換ツールを、CSVファイルにも対応できるように修正していきます。

具体的には、プログラムの冒頭でユーザーに「txt」か「csv」を選ばせ、その入力値に応じて処理を分岐させます。

ここから先は限定公開です

すでに購入済みの方はこちら

購読には会員登録が必要です

「半角英数字」と「大文字1個以上」を含む、8文字以上

会員登録には 利用規約/特定商取引法に基づく表記 への同意が必要です。

すでに会員の方はこちら

ログインして記事を読む

メールアドレス
パスワード
パスワードを忘れた方
新規会員登録はこちら

パスワード再設定

パスワードを再設定します。入力したメールアドレスに再設定用のURLをお送りしますので、パスワードの再設定を行なってください。
キャンセル
記事URLをコピーしました