質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

980閲覧

csvファイルに応じた処理

raspypy

総合スコア247

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2019/11/01 06:49

編集2019/11/05 03:52

##やろうとしていること

CSVファイルのデータに応じた処理を行いたいと考えています。
CSVファイルのデータは、データが毎分更新されてきます。
※csvファイルのデータ数は100個で、1分毎に末尾にデータを追加。1番上のデータは削除されていきます。

行いたい処理
csvデータ6列目の温度データが、25℃を超えたらLEDを0.5秒点灯する。
↓のCSVデータにLEDを点灯させたいときのデータを記載しました

##困っていること
25℃を超えた温度データは、CSVファイルにずっと(100個データ保存しているので、100分間)残ります。
プログラム①を実行すると、csvファイルを読み取るたびに、LEDが点灯してしまいます。

これを改善するために、次の考えでプログラム②を考えています。
1つ前の温度データを保持して、今の値と比較することで、LEDを点灯させるようにしたいと考えています。
プログラム②を実行すると、
1つ前の温度データprev_tmaxと
今の温度データtmaxの値が同じになってしまいます。
コードに不備があると思い、見直していたのですが、原因が分からず困っています。

##プログラム①

python

1def read_temp(): 2 df = pd.read_csv('temp.csv', names=['year', 'month', 'day', 'hour', 'minute', 'temperature']) 3 tmax=df['temperature'].max() 4 5 if(tmax >= 25.0): 6 GPIO.output(6, GPIO.HIGH) 7 sleep(0.5)

##プログラム②

python

1def read_temp(): 2 df = pd.read_csv('temp.csv', names=['year', 'month', 'day', 'hour', 'minute', 'temperature']) 3 tmax=df['temperature'].max() 4 if(tmax >= 25.0): 5 prev_tmax = df['temperature'].max() 6 GPIO.output(6, GPIO.HIGH) 7 sleep(0.5) 8 9 print (prev_tmax) 10 print (tmax)

##CSVデータ

csv

12019,11,1,14,57,17 22019,11,1,14,59,21 32019,11,1,15,1,22 42019,11,1,15,3,18 52019,11,1,15,4,19 62019,11,1,15,6,21 72019,11,1,15,8,17 82019,11,1,15,10,22 92019,11,1,15,12,19 102019,11,1,15,14,18

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2019/11/01 07:26

タグは「Python」や「Python3」ではないですか。ご提示のコードはpython3ですよね。 ご提示のpython3のコードでそこまでできているのであれば、そのまま改造を進めれば良いのでは。条件を満たしてLED点灯したものをファイルなどで覚えておいて、次に読んだときに同じならスキップすれば良いです。日時で判定しても良いでしょうし。(この日時のデータまでは処理済み、と判定)
raspypy

2019/11/01 07:35

コードについて、すみません。 本題から反れるのですが、私が使用しているラズパイの環境は、 $ python -V Python 2.7.16 です。 print()となっているので、python3と指摘されていると思いますが、 このコードでも、私の環境で動作しています。 コードの編集は、win10PC visual studioで行っています。
dodox86

2019/11/01 07:43 編集

> このコードでも、私の環境で動作しています。 そうでしたか。それでは私の方の誤解と間違いです。 python3 での print関数ではなく、python2.x のprint文と、('文字列') の扱いですね。失礼しました。[コメント修正]
raspypy

2019/11/01 07:53

いえいえ。私の方こそ、掲載するコードからPrint()の()を削除しておけばよかったです。 本題に戻りますが、回答ありがとうございます。 掲載したプログラムの実行結果は、 最高温度:27.240 :11/01_15:04に記録 となりますが、 回答いただいた、2つの方法について。 ①条件を満たしてLED点灯したものをファイルなどで覚えておいて、次に読んだときに同じならスキップ ②条件を満たした日時以降のデータのみ判定 ①の方法で試してみたいと思いますが、具体的な方法が全く分かっておりません。 アドバイスをいただけると助かります。
dodox86

2019/11/01 07:56

コードはご自分で書かれたものではないのですか? ご提示のものでそこまで出来ているのであれば、ご自分で書けるレベルの修正だと思うのですが。
raspypy

2019/11/01 08:04

コードは、ここで質問させていただきながら、作成させていただきました。 2つの方法を教えていただきましたが、それをコード化できるレベルに至っていないのが正直なところです。
dodox86

2019/11/01 08:23

> アドバイスをいただけると助かります。 ファイルの読み出し、書き込みについて調べて、扱えるようになってください。これ以上はコード書いた方が早いです。(そうだと丸投げです) > ①の方法で試してみたいと思いますが、具体的な方法が全く分かっておりません。 ①は思い付きで書きましたが、実際の動作をイメージするとわかりますが、実行した日時のデータをすべて保存しなくてはならなくなります。ということで、どちらかと言うとお勧めは②です。これだと処理済みである最新の日時、ひとつだけ覚えれば十分なはずです。
dodox86

2019/11/01 08:25

もちろん、私のコメントがすべてではありませんし、もっと良い方法があるかもしれませんので、他回答者様の回答を待つのも一手です。
meg_

2019/11/01 11:21

CSVファイルは改変しても良いのですか?
raspypy

2019/11/01 11:31

改変と言うと、データの構成を変えると言うことでしょうか? できれば、今のデータ形式のまま使用できたらと考えています。 質問に掲示したデータの値を変更するのは、全く問題ありません。
meg_

2019/11/01 12:09

「条件を満たした行の先頭や最後にマークを付ける(#など)」という意味です。 そうすればマークの付いた行はスクリプト内で無視すれば良いです。
raspypy

2019/11/01 12:21

そういう意味での改変は、全く問題ありません。
guest

回答1

0

自己解決

csvデータを追加するタイミングでプログラムの一部を修正して対応しました。

投稿2019/11/05 03:53

raspypy

総合スコア247

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問