Power Shellを使用したCSVファイルから.jpgファイル名を抽出するスクリプト

csvファイルから正規表現のパターンにマッチした文字列を抽出するスクリプトを紹介します。

紹介するスクリプトをはChat GPTで生成しました。

言語は Power Shell を使用しています。

カレントディレクトリのinput.csvファイル内の文字列から、"/images/<任意のファイル名>.jpg"を検索して拡張子を含むファイル名を抽出します。

抽出した文字列はカレントディレクトリのoutput.csvに書き出されます。

# 検索対象ファイル
$input_file = "input.csv"
# マッチした文字列を書き出すファイル
$output_file = "output.csv"

# 正規表現パターン
# JPEGファイル名を取得する(拡張子を含む)
$pattern = "/images/([\w\-. ]+\.jpg)"

# CSVファイルの読み込み
$input_data = Get-Content $input_file

# パターンにマッチしたすべてのキャプチャー部分を抽出して別のファイルに保存
$matches = $input_data | ForEach-Object { 
    [regex]::Matches($_, $pattern) | ForEach-Object { $_.Groups[1].Value }
}

$matches | Out-File -FilePath $output_file

Power Shell のターミナルを開き、input.csvとoutput.csvがあるディレクトリに移動して、このスクリプトをターミナルにペーストして実行することで動かすことができます。

具体例

input.csv

column_name
"29aopuうお/images/test0.jpg"moweて
同じセルにマッチパターンが複数出現
feうえお/images/test1.jpg oobけこ123/images/test2.jpgttt
.jpg.jpgが連続するファイル名
23/images/second_test2.jpg.jpgtttowm000
かき/images/test2_-23.jpgくけこ123/images/123456.jpgtttowm000
-が含まれるファイル名
かき/images/1te-st5_5.jpgくけこ123/images/2024-05-01.jpgtttowm000
ファイル名に使えない文字列が含まれる
"294kksoうお/images/tes*t:3_123.jpg"moweて

output.csv

test0.jpg
test1.jpg
test2.jpg
second_test2.jpg.jpg
test2_-23.jpg
123456.jpg
1te-st5_5.jpg
2024-05-01.jpg

test2.jpg.jpg のように.jpgが二回以上続くファイル名の場合はtest2.jpgも取り出せます。

また、同じセルに複数のマッチパターンが出現する場合はすべてのマッチパターンが抽出されます。

regex]::Matches($_, $pattern)

上記の部分ですべてのマッチパターンを取り出しています。

そして取り出したマッチパターンからキャプチャグループのみを取り出すために下記の処理を行っています。

ForEach-Object { $_.Groups[1].Value }

$_.Groups[0].Value にはマッチパターン全体の文字列が格納されており、$_.Groups[1].Value でパーターン内のキャプチャグループの一つ目が取り出せます。

今回はキャプチャグループは一つだけなので上記のスクリプトで取り出すことができます。