青竹雑記帖(6代目)

テキスト処理をメインとしたIT解説をします。

文字だけで扱うコンピュータの世界(13.5):PowerShellへの簡単な寄り道

生きています

博士論文をガラクタから見てくれのいいガラクタへ変換するのに長い歳月を要し、さらにその中身をキラキラに見せるためのセールストーク作りにさらに長い歳月をかけ、ついにその日が週明けに迫りました。生きて帰ってきます。

ここまでの内容を忘れてしまったついでに寄り道

blog.aotake91.net

前回のこのテーマでの更新からすでに1か月半が経ち、もはや何をしていたか忘れました……というのは嘘です。記事を読んだら思い出しました。前回はついにPythonを持ち出していろいろ始めましたが、その記事でも述べた通り、Pythonのプログラム開発環境・実行環境を整えるのは結構面倒です。同じことを手軽にできたら便利ですよね? 便利でしょう?(圧力)

みなさんはWindowsパソコンをお使いだと思います。……Mac? 私は実は正統なるUNIXであるmacOSのことをそこそこ気に入っていますので、そちらのシェルを使った技を披瀝して高笑いしたいのですが、そちらは後の回にまわします。Windowsには、PowerShellというアプリケーションプログラムがデフォルトでインストールされています。PowerShellを利用すると、コマンドを打つことでWindowsのさまざまな情報を得たり、Windowsにインストールされているプログラムを実行したりできます。さらに、PowerShellの文法に基づいてプログラムを記述し、実行することもできます。

実は私もPowerShellのクソ分厚い解説書こそ1冊持っているものの、まともに運用したことがありませんでした。ですので、この機会にいろいろ調べながら小技集を展開します。

そもそものPowerShellの開き方

ここで、実は環境によって開かれるウィンドウが違ってきたりするので、少々頭が痛くなります。ここでは、PowerShellやターミナル関係の環境構築を一切していない場合で説明します。もしこのパターン以外でしたら、おそらく貴方はそれなりに "パソコンをプログラミング向けに使いこなせている" はずですので、がんばってたどり着いてください。

開き方1:スタートメニューから

スタートボタン(画面左下の窓っぽいボタン)をクリックし、その状態でキーボードから「powershell」と打つと、次のような結果が出てくると思います(Windows 11の場合。Windows 10でもわりとそっくりの表示になるはずです)。この中から「Windows PowerShell」をクリックするか、その画面でエンターキーを押してください。すると、次のような画面が開きます。

スタートメニューからPowerShellを検索したところ

PowerShellの最初の画面

ここにコマンドを打ち込んだりすると、いろいろと結果が出ます。この開き方をした場合は、後でいろいろ扱うファイルを置いているフォルダ(ディレクトリ)に移動(操作対象を変更)する必要があります。

開き方2:対象フォルダ(ディレクトリ)に移動した状態で開く

たとえば、デスクトップが操作対象となっている状態で開きたい場合は、デスクトップ画面でShiftキーを押しながら右クリックしてください。次のようなメニューが出てきます。私の環境では右クリックメニューを最初から全部展開するよう設定を変えているのと、いろいろ入れまくっているのとでごつい見た目になっています。Windows 11のデフォルトの右クリックメニューの場合は、出てきたメニューから「その他のオプション」をクリックすると同じメニューが出てきます。

デスクトップ画面でShiftキーを押しながら右クリックして、メニューを出した状態

この中から「PowerShell ウィンドウをここで開く」の項目をクリックすると、デスクトップが操作対象となっている状態でPowerShellが開きます。ファイルをいろいろ扱いたい場合は、こちらの開き方がおすすめです。

小技集

PowerShellでは、内部の各コマンドのことを「コマンドレット」と称しています。コマンドレット名を打ち込むか、それとともに操作したいファイル名やオプションなどを打ち込むかすると、コマンドレットを実行できます。

ここからは、デスクトップを操作対象にした状態でPowerShellを開き、さらに、デスクトップ上に前回扱った郵便番号リストファイル「KEN_ALL.CSV」があることを前提とします。ファイルがない場合は、前回の記事を参考に入手してください。

指定したファイルを、既定のプログラム(Windowsによってその種類のファイルを開くよう関連付けされているプログラム)で開く

Invoke-Item KEN_ALL.CSV

Invoke-Item コマンドレットを利用し、その後に続けてファイル名を打ち込むと、関連付けられた既定のプログラムでファイルを開くことができます。ファイル1個だけですとあまり面白くありませんが、ワイルドカードアスタリスク * や疑問符 ? )を利用して複数のファイルを指定すると、ワイルドカード条件に一致するファイルをすべて一気に開くことができます。

指定したファイルから、指定した文字列を検索する

Select-String KEN_ALL.CSV -Pattern "小郡市" -Encoding Oem

Select-String コマンドレットを利用し、Patternオプションで指定した文字列を含む行を取り出すことができます。ひとつ注意が必要なのは、KEN_ALL.CSVファイルはShift_JISエンコーディングで作成されているため、単にファイル名と検索文字列を指定するだけでは出力結果が文字化けしてしまいます。それを避けるため、Encodingオプションを利用して、ファイルのエンコーディングを明示的に指定します。日本語環境のWindowsでは、オプションを "Oem" に設定すると正しく表示されるはずです。

Select-String コマンドレットによる検索結果

    1. ところで小郡市とは?
    1. 私の故郷にして本拠地です。

ファイルの内容を参照する

Get-Content KEN_ALL.CSV -TotalCount 5 -Encoding Oem

Get-Content コマンドレットを利用すると、指定したファイルを読み込んで表示できます。オプションを指定することにより、たとえば指定の行数だけ表示するようなこともできます。

  • TotalCount オプション:ファイルの先頭から指定した行だけ取り出して出力します。
  • Last オプション:ファイルの末尾から指定した行だけ取り出して出力します。

次回予告

前回の案内通り、Pythonで郵便番号リストをもう少しいじりましょう。