現状
Arduinoを使ってセンサのデータを取得し,取得したデータをPythonで受け取ってCSV形式で保存したい.実装したところ,CSVファイルで時系列データが更新されてしまう.
該当プログラム
date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
with open('./data.csv', 'w' , encoding= 'utf-8' ) as f:
print('{},{}'.format(date,data),file=f)
解決方法
open(ファイル名, モード)でファイルをモードに従って開く.モードをaに変えることで解決できた.wは書き込み専用で,ファイルへの書き込みは,同じファイル名のファイルがあった場合は,新しく上書きされる.(既存ファイルに書き込みがあった場合,内容は削除される)
aにした場合,ファイルへの追記となり,同じファイル名のファイルがあった場合は既存のファイルに追加する.そのためモードをaに変更することで解決する.
該当プログラム
date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
with open('./data.csv', 'a' , encoding= 'utf-8' ) as f:
print('{},{}'.format(date,data),file=f)
Pythonのファイル入出力のモード
ファイルの入出力時に使用するモードをいくつか紹介する.
| モード | 意味 | 注意事項・補足 |
|---|---|---|
| 'r' | 読み込み専用 | ファイルが存在しない場合はエラーになる |
| 'w' | 書き込み専用 | 既存のファイルがある場合上書きされる |
| 'a' | ファイルの末尾に追記 | ファイルがない場合は新規作成 |
| 'r+' | 更新(読み取りと書き込み) | 'r'と同様に,ファイルが存在しない場合はエラーになる |
| 'w+' | ファイルを空にして,そのファイルを読み書き用に開く | 'w'と同様に,既存のファイルがある場合上書きされる |
| 'a+' | ファイルを読み書き用に開いて,ファイルの末尾に追記 | 'a'と同様に,ファイルがない場合は新規作成 |
| 'b' | ファイルをバイナリモードで開く | 他のオプションと合わせて指定する |
