Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
困ったCSVファイルの話
Search
もっち
January 15, 2026
Technology
0
110
困ったCSVファイルの話
Yokohama North Meetup #12「LT新年会2026」
https://yokohama-north.connpass.com/event/377972/
で発表した資料です。
もっち
January 15, 2026
Tweet
Share
More Decks by もっち
See All by もっち
もう外には出ない。より快適なフルリモート環境を目指して
mottyzzz
13
12k
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
12
7.7k
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
1.1k
Other Decks in Technology
See All in Technology
Eight Engineering Unit 紹介資料
sansan33
PRO
0
6.2k
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
140
2025-12-27 Claude CodeでPRレビュー対応を効率化する@機械学習社会実装勉強会第54回
nakamasato
4
1.4k
AWSと生成AIで学ぶ!実行計画の読み解き方とSQLチューニングの実践
yakumo
2
380
業務の煩悩を祓うAI活用術108選 / AI 108 Usages
smartbank
9
21k
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
2
830
[PR] はじめてのデジタルアイデンティティという本を書きました
ritou
1
800
Master Dataグループ紹介資料
sansan33
PRO
1
4.2k
AI: The stuff that nobody shows you
jnunemaker
PRO
2
160
AIと融ける人間の冒険
pujisi
0
110
形式手法特論:コンパイラの「正しさ」は証明できるか? #burikaigi / BuriKaigi 2026
ytaka23
16
4.9k
Featured
See All Featured
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
30 Presentation Tips
portentint
PRO
1
180
The SEO identity crisis: Don't let AI make you average
varn
0
47
Color Theory Basics | Prateek | Gurzu
gurzu
0
170
Are puppies a ranking factor?
jonoalderson
0
2.6k
Amusing Abliteration
ianozsvald
0
85
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
76
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
330
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
63
The Limits of Empathy - UXLibs8
cassininazir
1
200
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
160
Transcript
困ったCSVファイルの話 2026/01/15 もっち(@mottyzzz) Yokohama North Meetup #12「LT新年会2026」
⾃⼰紹介 もっち(@mottyzzz) 松本明紘 株式会社 カケハシ(2023年2⽉〜) 好き:ビール🍻 コーヒー☕ 横浜の南⻄側に住んでます(北部ではない) 2
3 みんな⼤好き CSV
CSVファイルの⽤途 4 • データ受け渡し • エクスポート・⼀括インポート • 処理中の中間データ • ログ
• バックアップ・アーカイブ • 設定ファイル • テストデータ
5 CSV (Comma-Separated Values)
CSVの仲間 TSV = Tab-Separated Values SSV = Space-Separated Values SSV
= Semicolon-Separated Values 6
7 CSV (Character-Separated Values) それらをまとめて、こう呼ばれることもある
割とみんな ⾃由なCSVフォーマットで CSVファイルを作ってる 8
RFC 4180 9
10 RFC 4180 CSVファイルの共通フォーマットと MIMEタイプ(text/csv)の仕様を定 義している 2005年に策定された 下記のようなフォーマット仕様が 定義されている •
レコードの区切り(改⾏) • ヘッダーの扱い⽅ • ダブルクォーテーション(")の使い⽅ • エスケープの⽅法 • 列数の⼀致 https://www.rfc-editor.org/rfc/rfc4180
みなさん仕様 守っていますか? 11
読み込み・書き込みする ソフトウェア(ライブラリ、ツール) によって独⾃の解釈で処理している 12
これまでに出会った 困ったCSVファイルの フォーマットを 5つ紹介します!!! 13
困った①:""なしの改⾏、カンマ、ダブルクォーテーション 14 商品名,説明,価格,備考 りんご,新鮮な国産りんご,100,なし みかん,愛媛県産,⽢くてジューシー,80,⼈気商品 メロン,⾼級メロン "⼣張キング",5000,ギフト⽤化粧箱⼊り トマト,完熟トマト 産地: 熊本県
糖度: 8度以上,200,サラダ、パスタに最適 よくあるCSVパーサーでは処理で きないことが多いので、独⾃に処 理する必要があるが、ある程度構 造に制約がないと難しい ダブルクォーテーション使ってね
困った②:複数⾏ヘッダ+α 15 ,,売上データ,,,,,在庫データ,, ,,,2024年上半期,,2024年下半期,,,⽉末時点, 商品コード,商品名,1⽉,2⽉,3⽉,4⽉,5⽉,6⽉,数量,単位 ,,(千円),(千円),(千円),(千円),(千円),(千円),, A001,りんご,150,180,200,220,190,210,500,個 A002,みかん,120,90,80,100,110,130,300,個 A003,バナナ,200,210,190,180,200,220,450,房 B001,⽜乳,80,85,90,88,92,95,200,本
B002,ヨーグルト,60,65,70,72,68,75,150,個 C001,⾷パン,100,110,105,115,120,125,80,⽄ C002,菓⼦パン,45,50,55,48,52,58,120,個 ほとんどのケースで、skip=nで処理 することでなんとかなるけど、、、 パースにヘッダーの情報が必要な場 合は頑張らなきゃいけない ヘッダ
困った③:固定⾏数じゃない基本情報 16 注⽂番号,ORD-2024-0123 注⽂⽇,2024-01-15 顧客名,株式会社サンプル商事 配送先住所,東京都渋⾕区1-2-3 電話番号,03-1234-5678 … 明細 商品コード,商品名,数量,単価,⼩計
PROD001,りんご,10,100,1000 PROD002,みかん,20,80,1600 PROD003,バナナ,5,120,600 システムからエクスポートした帳票 系のデータで稀によく⾒る形。 処理すべきデータレコード以外のも のが先頭に固定⾏数でまとまってく れていればまだ良いけど、、、 基本情報
困った④:⾏によって列数が変わる 17 H,ORD-2024-0123,2024-01-15,株式会社サンプル商事 C,⽥中太郎, 03-1234-5678 A,150-0001,東京都渋⾕区1-2-3,サンプルビル5F I,1,りんご,10,100,1000 I,2,みかん,20,80,1600 I,3,バナナ,5,120,600 S,⼩計,3200
S,消費税(10%),320 S,送料,500 T,合計⾦額,4020 P,銀⾏振込,2024-01-31,サンプル銀⾏ 本店 普通 1234567 N,午前中配送希望 N,段ボール箱で梱包 D,2024-01-16,ヤマト運輸,1234-5678-9012,配送中 CSVパーサーによっては読み込みエ ラーになったり、列数が⼀番多いと ころに合わせてくれたり。 エラーになる場合は、独⾃にパース する必要がある。他の困ったケース と組み合わさると⾟い
困った⑤:複数の表が⼀つのCSVファイルに混在している 18 売上ID,⽇付,商品,数量,⾦額 S001,2024-01-15,りんご,10,1000 S002,2024-01-15,みかん,5,400 … 仕⼊ID,⽇付,商品,仕⼊先,数量,単価,合計⾦額 P001,2024-01-10,りんご,⼭⽥農園,100,80,8000 P002,2024-01-12,みかん,鈴⽊果樹園,200,70,14000 …
商品,在庫数,最終更新 りんご,50,2024-01-15 みかん,120,2024-01-15 バナナ,80,2024-01-14 ファイル分けようね
その他 • 同じカラム名のカラムを複数存在させないで • ⽂字コードの混在やめて • BOM • エスケープシーケンス独⾃に決めるのやめて •
"123"が数値なのか⽂字列なのか分からない • 空値の表現統⼀して(N/A, “”, 半⾓スペース, 空⽂字, Null) 19
実装者はCSVファイルを処理する時は、 ⾃分が⽣成するときは保守的 他所から受け取るものには寛容 になるべきである(意訳) 20 RFC 4180にも下記の記載がある
CSVファイルを扱うときは 気をつけましょう!!! 21
困ったCSVファイルの話 2026/01/15 もっち(@mottyzzz) Yokohama North Meetup #12「LT新年会2026」