MENU

PowerShellで区切り文字の違うCSVを読む

当ページのリンクには広告(PR)が含まれていることがあります。
PowerShellで区切り文字の違うCSVを読む。区切りが違うCSV、区切りを指定、列の並びを確認の処理例。

CSVを読み込んだら、行全体がひとつの列名になっている。文字コードだけでなく、区切り文字が合っているかを確認してください。拡張子が.csvでも、出力元によってはセミコロンやタブで区切られています。

PowerShellのImport-Csvは、区切りを-Delimiterで指定できます。CSVを行ごとにSplitする処理へ置き換える前に、引用符の中に区切り文字が入る例も使い、読み方を確かめます。

目次

セミコロンの練習用CSV

次は一時フォルダーへ架空の2件を保存し、セミコロンで読み込む例です。備考の「確認;済み」は引用符で囲まれているので、ひとつのセルとして扱います。

$practiceDir = Join-Path ([IO.Path]::GetTempPath()) ('csv-delimiter-' + [guid]::NewGuid())
[IO.Directory]::CreateDirectory($practiceDir) | Out-Null
$csvFile = Join-Path $practiceDir 'practice.csv'
$csvText = @'
id;備考
A01;"確認;済み"
A02;未確認
'@
Set-Content -LiteralPath $csvFile -Value $csvText -Encoding UTF8
$rows = @(Import-Csv -LiteralPath $csvFile -Delimiter ';' -Encoding UTF8)
$rows.Count
$rows[0].id
$rows[0].備考

期待する結果は2件、最初のIDがA01、備考が確認;済みです。区切りのセミコロンと、引用符の内側にあるセミコロンを区別できているかを見ます。データの保存と読み取りには、どちらもUTF-8を指定しています。

区切り文字の指定を変える

タブ区切りなら、PowerShellでは-Delimiter "`t"のようにタブの文字を指定します。カンマ区切りなら-Delimiter ','です。-UseCultureは環境のリスト区切り文字に合わせる指定なので、入力仕様が決まっている業務で使う場合は、その環境依存も確認します。

列が一つになった場合は、まずテキストとして見出しと数行を読み、どの文字が区切りに使われているかを確認します。画面上の表だけを見て、カンマだと決めないようにしてください。文字コードを変えても、区切りの指定が違う問題は直りません。

引用符の中を分割しない

単純に;で文字列を分けると、例の「確認;済み」まで二つに分かれます。カンマや改行を含むセルでも、CSVの引用ルールを考える必要があります。表を読む用途では専用の読込処理を使い、セルの意味を保ちます。

先頭の行は通常、列名として扱われます。列名が重複したり空欄になったりするデータでは、読めた後のプロパティ名も確認します。必要な見出しがそろい、データ行の数が元と一致していることを、別の検査として残してください。

行数と読み込んだ件数

引用符の中に改行があるCSVでは、テキストの行数とデータの件数が一致しない場合があります。ファイルの改行数だけを数えて、取り込み件数が合っていると判断しないようにします。入力例と読込結果を対応させ、1件がどこからどこまでかを確認します。

この例はWindows PowerShell 5.1とPowerShell 7でセミコロンと引用符の読み取りを確認する範囲です。実データのすべての不備に対応した取込ツールではありません。業務へ加える場合は、区切り、文字コード、列名、空欄の扱いを入力条件としてそろえてください。

関連する記事

Pythonでファイルを読み書きする基本|txt・csv・jsonの使い分け

PythonでCSV集計|合計・平均とpandasの基本

公式資料

Import-Csv (Microsoft.PowerShell.Utility) – PowerShell | Microsoft Learn

about_Character_Encoding – PowerShell | Microsoft Learn

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次