はじめに
今回はRaspberry Pi Pico シリーズのMicroPythonで、CSVファイルを使う方法を解説します。
Picoシリーズを使っていると「このデータCSVで出力したいな」と思うことありますよね。
MicroPythonのファームウェアでは、仮想ファイルシステムとPythonの強力な文字列処理が使えるため、ヘッダの読み飛ばしや、カンマでの分割など、パソコンと同じように読み書きすることができます。
ちょっとした入出力にちょうどいい方法なので、興味のある方はぜひご覧下さい。
記事ではRaspberryPi Pico2を使っていますが、Pico、PicoWでも同じ配線・プログラムで動作します。
ぜひお手持ちのPicoシリーズで、試してみてください。
~ この記事の内容 / Contents ~
環境
この記事で使用する環境は以下の通りです。
環境 | バージョンなど | 備考 |
開発用PCのOS | Windows11 | Windows10でもOKです |
言語 | MicroPython Ver.1.24.0 | |
開発環境 | Thonny Ver.4.1.4 | |
ボード | RaspberryPi Pico2 | PicoシリーズならどれでもOKです。 |
RaspberryPi Pico2との接続
特別な機器の接続は必要ありません、Picoシリーズ単体でOKです。
使用する部品
RaspberryPi Pico 2
今からPicoを揃えるなら、RaspberryPi Pico2がおすすめです。Picoに比べて1.5倍高速で、値段はほぼ一緒です。
すぐに使えるキットもあります
ピンヘッダが半田付けされて、USBケーブルやピンのレイアウト表までついた、すぐに使えるセットもあります。
プログラム概要
今回のプログラムの概要は以下の通りです。
- CSVファイルの書き込み
- CSVファイルの読み込み
- ヘッダの読み飛ばし
- カンマで分割
実行結果
後述するプログラムの実行結果は以下の通りです。
CSVファイルが作成された後、その内容がThonnyのターミナル部分に表示されます。
実行してもファイル表示されない場合は、設定から「更新」をクリックしてみてください。
全体コード
全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。
import os
# ファイル名を指定します。
fileName = "pico_spec.csv"
# 書き込みモードでファイルを開きます
f = open( fileName, 'w')
# 内容を書き込みます
f.write("名前,価格,無線の有無\n")
f.write("Pico,4ドル,なし\n")
f.write("Pico W,7ドル,あり\n")
f.write("Pico 2,5ドル,なし\n")
# 書き込み完了後にファイルをクローズします。
f.close()
# 読み取りモードでファイルを再度開きます
f = open(fileName, "r")
# ヘッダーを飛ばします
next(f)
# 一行ずつ読み込んでカンマで分割して表示します
for line in f:
words = line.split(",")
print( "名前: " + words[0] )
print( "価格: " + words )
print( "無線: " + words )
# 書き込み完了後にファイルをクローズします。
f.close()
Picoシリーズ単体(Thonnyなし)の状態でプログラムを実行する場合は、Picoシリーズ本体に「main.py」という名前でプログラムを保存してください。
コードのポイント
CSVファイルの書き込み
open関数に書き込みを示す「w」と、ファイル名を指定して書き込みモードで開きます(ファイルがない場合は新規作成)。
open後はwrite関数を使って、先頭行にヘッダー(項目名などの情報)、次の行から、項目の内容をカンマ区切りで入力します。
書き込みが完了したらclose関数を使って、ファイルを閉じます。
# 書き込みモードでファイルを開きます
f = open( fileName, 'w')
# 内容を書き込みます
f.write("名前,価格,無線の有無\n")
f.write("Pico,4ドル,なし\n")
f.write("Pico W,7ドル,あり\n")
f.write("Pico 2,5ドル,なし\n")
# 書き込み完了後にファイルをクローズします。
f.close()
項目を見やすく(そろえる)ためのスペースは入れないことをおすすめします。MicroPythonではreplace関数が使えないので、読み込み前後でスペースを消す処理が大変になります(泣)。
CSVファイルの読み込み
書き込みと同様に、open関数に読み込みを示す「r」とファイル名を指定して、ファイルを開きます。
# 読み取りモードでファイルを再度開きます
f = open(fileName, "r")
ヘッダの読み飛ばし
ファイルを開いたあとは、一行ずつ読み込む形になりますが、先頭行はヘッダー(項目名)のため、ファイルのデータ部分を使いたい場合は邪魔になります。
そのため、next関数を使って、一行目の読み取りをスキップします。
# ヘッダーを飛ばします
next(f)
カンマで分割
ヘッダをスキップしたあとは、データ行が続くためforループで、一行ずつ読みだします。
split関数にカンマを指定して、各要素をリストに分割します。
上記が完了したら、CSVの各要素にインデックスでアクセスできるようになります。(今回はprintで各要素を表示)
# 一行ずつ読み込んでカンマで分割して表示します
for line in f:
words = line.split(",")
print( "名前: " + words[0] )
print( "価格: " + words )
print( "無線: " + words )
# 書き込み完了後にファイルをクローズします。
f.close()
まとめ
今回はRaspberry Pi Pico シリーズのMicroPythonで、CSVファイルを使う方法を解説しました。
JSONやXMLも便利ですが、サクッと入出力しようと思うと、やっぱりCSVファイルが便利ですよね。
Picoシリーズ+MicroPythonであれば、PCでPythonを使うときと同じように、簡単にCSVファイルの読み書きができるようになります。
知っていると、ちょっとした改良やデバッグが楽になるので、気になった方はぜひ一度試してみてください。
参考になればうれしいです。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。