CSVの先頭のゼロを保つには?識別子、数値、表計算ソフトへの取り込み

CSVを取り込むときに、先頭のゼロ、長い数字列、日付に見えるコードを壊さない方法を解説します。架空のサンプルデータと標準ライブラリのPythonによる確認付きです。

他の言語で読む

Ithy記事のAI支援翻訳です。原文のバージョン:2026-10-24。翻訳公開日:2026-10-26。 原文を読む. 独自の例にはその旨を表示しています。特定の人間の専門家によるレビューではありません。

CSVファイルに 00123 が正しく入っていても、開いた表計算ソフトでは 123 と表示されることがあります。ファイルに保存されているのはテキストのフィールドで、それをどう解釈するかは取り込むアプリケーションが決めます。識別子は取り込み時にテキストとして保持し、元のファイルを置き換える前に、保存した結果を確認してください。

識別子は必ずしも数値ではない

個数や価格のような量には計算を使います。郵便番号、カタログのキー、口座の識別子は、その意味に応じて扱ってください。それらの数字はラベルであり、足し算する量ではないことがあります。先頭のゼロ、長い数字列、日付に見えるコードは、意図しない変換によって壊れる可能性があります。

先頭のゼロと大きな数値に関するMicrosoftのガイドでは、該当する列をテキストとして取り込む方法が説明されています。また、対応するExcelのバージョンにある自動変換の制御も記載されています。実際に使っているバージョンで確認してください。同じ設定がすべてのエディションにあるわけではありません。

オリジナルの架空のCSVの例

これらは学習用に作った架空のレコードで、実在の口座や顧客のデータではありません。サンプルCSVをダウンロードする。

item_id,reference,label,quantity
00123,12345678901234567890,JAN1,7
00007,98765432109876543210,1E10,12
列意図する意味取り込み時の型
item_id5文字の識別子テキスト。00123 と 00007 を保持する
reference長い参照文字列テキスト。すべての桁を保持する
label日付や指数ではなく、コードであるテキスト。JAN1 と 1E10 をそのまま保持する
quantity個数検証後に整数とする

CSVには、この列の型の表が、どこでも強制されるスキーマとして含まれているわけではありません。引き継ぎの指示書にこの表を入れると、別のアプリケーションが異なる解釈をするのを防ぐ助けになります。

Excelで意図的に取り込む

  1. 元のCSVを、変更しないままコピーして保管します。
  2. ダブルクリックによる自動的な推測に頼らず、アプリケーションのテキスト/CSV取り込みの手順を使います。
  3. プレビューを確認し、変換が適用される前に、識別子にあたる列をテキストに設定します。クエリの手順では、型を自動で変更するステップを、必要に応じて確認または置き換えます。
  4. 区切り文字、文字エンコード、日付に見える値の扱いを確認します。
  5. データを読み込み、正確な識別子を元のデータと比較します。
  6. エクスポートしたあとは、できあがったCSVをテキストエディタで確認し、意図した列の型で再度取り込みます。

Microsoftのテキストファイルのインポート/エクスポートの手順では、「開く」と「取り込む」の違いが説明されています。メニューの名称は、プラットフォームやバージョンによって異なります。5桁のゼロというユーザー定義の表示形式を使えば 123 を 00123 と表示できますが、それは元のテキストの識別子を保持することとは違いますし、すでに失われた桁を復元することでもありません。

Pythonで文字列を確認する

Pythonのcsvのドキュメントには、フィールドは既定で文字列として読み込まれ、変換オプションについては特定の例外があると書かれています。次の小さな確認コードは、標準ライブラリだけを使います。

import csv

with open("identifier-example.csv", newline="", encoding="utf-8") as f:
    rows = list(csv.DictReader(f))

assert rows[0]["item_id"] == "00123"
assert rows[0]["reference"] == "12345678901234567890"
assert rows[1]["label"] == "1E10"
quantities = [int(row["quantity"]) for row in rows]
assert sum(quantities) == 19

この確認では、あえて quantity 列だけを変換しています。これはサンプルファイルの内容を示すものであり、任意のエクスポートや表計算アプリケーションについての保証ではありません。

自動では復元できないもの

長い識別子がすでに丸められ、元のファイルに上書き保存されている場合は、セルの書式をテキストに変更しても、失われた桁を復元できません。変更されていない元のデータから復元してください。123 が 00123 を意味するのか 123 を意味するのか分からない場合、ゼロで埋めるかどうかは業務ルールで決めることであり、元の値の証明にはなりません。

CSVのフィールドを引用符で囲むのは、区切り文字などの文字を保持するための構文です。表計算ソフトがそのフィールドをテキストとして扱うよう、どこでも強制するものではありません。役に立つ引き継ぎ資料には、文字エンコード、区切り文字、意図する列の型、検証ルールが書かれています。文書の共有に関する関連する問題については、Wordのフォントの利用可否と移植性を参照してください。

訂正する場合は、該当する主張と裏付けとなる出典を次から送ってください: Ithy ヘルプ. 調査方法 · その他のリサーチガイド.