search
LoginSignup
2

More than 1 year has passed since last update.

posted at

updated at

Organization

CSVファイルへのログ書き込み(Python, C言語)

業務上、連続でデータを取る→CSVファイルに書き込んでログを取る、という作業が多かったので
備忘録的にまとめてみました。

環境

OS:Raspbian Buster 10
使用ソフト:Code-OSS(headmelted) 1.44.0

プログラムの流れ

プログラムと同じ階層に空のCSVファイルを作成し、そこにログを書き込んでいきます。
『西暦/月/日 時:分:秒,(データ1),(データ2)...』という風に、日付を最初に付けて、
記録したいデータを後ろにカンマ区切りで羅列していきます。

Python

csvWrite.py
import csv
import datetime

n = 0
try:
    with open('logger.csv', 'a') as f:
        # ログを10回書き込む
        while n < 10:
            # 日付・時刻
            now = datetime.datetime.now()
            nowTime = '{0:%Y/%m/%d %H:%M:%S}'.format(now)

            # データ群
            data1 = 'data1'
            data2 = 'data2'
            data3 = 'data3'

            writeStr = nowTime + ',' + data1 + ',' + data2 + ',' +data3
            writeStr = writeStr.split(',')

            # 書き込んだ文字列の確認
            # 例:'2020/03/06 15:00:00','data1','data2','data3'
            print('writeStr = %s' % writeStr)

            writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
            writer.writerow(writeStr)

            n += 1

except FileNotFoundError as e:
    print(e)
except csv.Error as e:
    print(e)

C言語

csvWrite.c
#include <stdio.h>
#include <time.h>

FILE *fp;
char *fname = "logger.csv";
struct tm tm;

int main(void)
{
    struct tm tm;
    time_t t;

    // データ群
    char data1[] = "data1";
    char data2[] = "data2";
    char data3[] = "data3";

    // ファイルを開く(無い場合は自動で作成される)
    fp = fopen(fname, "a");
    if(fp == NULL){
        printf("file can't open¥n");
        return -1;
    }

    // ログを10回書き込む
    for(int n = 0; n < 10; n++){
        // 日付・時刻
        t = time(NULL);
        localtime_r(&t, &tm);

        fprintf(fp, "\"%04d/%02d/%02d %02d:%02d:%02d\",",
            tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
            tm.tm_hour, tm.tm_min, tm.tm_sec);
        fprintf(fp, "\"%s\",\"%s\",\"%s\"\n", data1, data2, data3);

        // 書き込んだ文字列の確認
        // 例:"2020/03/06 15:00:00","data1","data2","data3"
        printf("writeStr = \"%04d/%02d/%02d %02d:%02d:%02d\",\"%s\",\"%s\",\"%s\"\n", 
            tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
            tm.tm_hour, tm.tm_min, tm.tm_sec, data1, data2, data3);
    }

    fclose(fp);
    return 0;
}

まとめ

IoT開発をしているとサーバーにログを残したりするのですが、インターネットに接続できなかった場合に
その間のログが消えた時の絶望感がすごいので、SDカードにCSVファイルを作ってこうしてこまめに保存できたらいいなと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2