トップ «前の日記(2025年12月10日) 最新 次の日記(2025年12月20日)» 編集

xiphioの備忘録


2025年12月13日

_ [computer] Vinicaのダウンロードデータを整理してみました。

10月末のVinicaの終了後に、それまでのアップロードした画像や感想、それから紐付けされたワイン名などのデータを一括でダウンロード出来るサービスがありました。私も申込みしまして、Vinica終了後、自分の分のデータをダウンロードしました。

登録アカウント関連データの一括ダウンロードと言っても、その内容がどういう形式になっているのかなどの事前情報全く無く、一抹の不安もありました。ダウンロードデータを展開しますと、テキストの投稿データはCSV形式になっていまして、アップロード画像はまた別のディレクトリに入っていました。ダウンロードした圧縮ファイルを展開すると、こんなファイルやディレクトリになります。

images (画像だけ入ったディレクトリ)
posts.csv (同定したワイン名や、感想などのテキストのみの投稿データ)
user.csv (ユーザデータのみで、小さい)

ディレクトリimagesには、6桁から7桁の数字だけの名前のサブディレクトリが沢山入っていて、その中にアップロードした画像ファイルが入っています。どうやら投稿件数だけ、サブディレクトリは有るようです。ただ、そのサブディレクトリ名の番号は、posts.csvのどのデータとも何の関連性も無さそうなのが問題です。よく見てみると、その順番だけは合っています。おそらく、画像データにつけられている番号は、Vinica全体のシリアルか何かのID番号かと思います。ただ投稿データposts.csvには、その番号は入っていません。投稿日とかと関連があるかと思いましたが、何も関係なさそうです。要するに関連しているのは、単にその順番だけです。

つまり、posts.csvのN行目のデータ(ワイン)の画像は、imagesディレクトリを名前順で表示したときのN番目のサブディレクトリの中に入っていると言うだけです。例えばposts.csvで100番目のデータ(ワイン)の画像を見るためには、imagesディレクトリの中で100番目のサブディレクトリを数えて同定し、そこの中のファイルを開かなければならないと言う事、いやぁ、面倒くさい!。なので、折角ダウンロードしたものの、今まで放置してありました。

何時までもそのままにはしておけないので、どうにかしようと取りあえずposts.csvの方をExcelで開いてみましたが、文字化けしています。データインポートでUTF8を指定して開くと見れましたが、所々行がおかしいです。よく見るとテキスト項目で、ダブルクオートの中で改行していのを勘案せず改行して、そこでデータが切れてしまっています。

Excelでのファイルの読み込み方をどうにか工夫すれば、きちんと読み込めるのかも知れませんが、面倒なのでここは最近使っているNotionで読み込んでみると、ちゃんとしたデータベースにしてくれました。ただ、画像と合わせるために、データの番号(行番号)が必要になりますが、Notionでは、連番を自動的に割り付けてくれる様なプロパティ(項目)は無いようです。

またしてもChatGPTに相談して、元のCSVのファイルにシリアル番号加える、pythonのプログラムを書いてもらいました。(本当は、この位自分で書けば良いのだけど、import csvは必要なのかとか、ちゃんと動くプログラムにするには少し時間がかかるよなぁ)

で、書いてくれたのが以下の様なプログラム、流石にちゃんと書けている、、でも、記録容量もメモリも小さかった昔の時代からプログラムを書いている私には、まとめて全部読み込んでから処理ってプログラムは、やっぱし書けないですね。これはいかにも今風。

import csv
with open("input.csv", newline="", encoding="utf-8") as f: reader = csv.reader(f) rows = list(reader)
rows[0].insert(0, "No")
for i, row in enumerate(rows[1:], start=1): row.insert(0, i)
with open("output.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerows(rows)
、、とは言え、2千行程あってもこれでちゃんと動くので(すごいなぁ)、出来あがったシリアル番号付きのCSVデータをNotionに読ませて、データベースにしました。

次は画像データの方です。要するに名前の順にディレクトリ名をシリアルにリネームすれば良いのです。普通考えつくのは、名前順のファイル名リストを一端ファイルに出力しておいて、そのファイルに手を加えてリネームのバッチファイルを作る、と言う感じですが、簡単な方法は無いかとまたしてもChatGPTに相談しますと、以下の様なPowerShellのプログラムを書いてくれました。

動作確認用
Get-ChildItem -Directory |
Where-Object { $_.Name -match '^\d+$' } |
Sort-Object { [int64]$_.Name } |
ForEach-Object -Begin { $i = 1 } -Process {
    "{0}  ->  NO_{1:D4}" -f $_.Name, $i
    $i++
}
リネーム実行版 Get-ChildItem -Directory | Where-Object { $_.Name -match '^\d+$' } | Sort-Object { [int64]$_.Name } | ForEach-Object -Begin { $i = 1 } -Process { Rename-Item $_ -NewName ("NO_{0:D4}" -f $i) $i++ }
短いですが、このプログラムは自分では書けませんね、、AI様々です。

一応、1000番目の投稿データと1000番目の画像が一致する事、2000番目も、最後も、データと画像が一致する事を確かめました。 画像全部で3Gちょいあるので、それまでNotionに上げるのは難しいので(出来ない事はない様だけど)、以後更新が有るデータではないので、画像だけローカルでもかまわないかな、と思います。(一応、ChatGPTのお勧めは、「GCP:Cloud Storage + Firestore」らしいです)