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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

821閲覧

csvファイルで書き出す際に改行されない

noriko_sato

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/02/14 02:28

現在、水質データを5秒ごとに取得し、1分毎にcsvを生成するプログラムを作成しております。
以下のようなプログラムを作成し、実行したところ、
画像のように、データが改行されず横に向かってデータが書き込まれるようになってしまいました。

[date, DO[mg/L], watertemp[C]]
[2022/02/14 10:00:00, 6.62, 20.00]
[2022/02/14 10:00:05, 6.73, 20.00]
...
のように、csvを測定データごとに改行できるようにするには
どのようにすればよいのでしょうか。

よろしくお願いいたします。

python.py

1import io 2from os import replace 3import sys 4import fcntl 5import time 6import datetime 7import csv 8import copy 9import string 10from AtlasI2C import ( 11 AtlasI2C 12) 13from w1thermsensor import W1ThermSensor 14 15#Atlasセンサの設定 16def print_devices(device_list, device): 17 for i in device_list: 18 if(i == device): 19 print("--> " + i.get_device_info()) 20 else: 21 print(" - " + i.get_device_info()) 22 23 24def get_devices(): 25 device = AtlasI2C() #デバイスの情報 26 device_address_list = device.list_i2c_devices() #デバイスのアドレス(97,99,100) 27 device_list = [] 28 29 for i in device_address_list: 30 device.set_i2c_address(i) 31 response = device.query("I") 32 moduletype = response.split(",")[1] 33 response = device.query("name,?").split(",")[1] 34 device_list.append(AtlasI2C(address = i, moduletype = moduletype, name = response)) 35 return device_list 36 37def main(): 38 39 device_list = get_devices() 40 #print('devicelist:',device_list) 41 42 device = device_list[0] 43 #print('device',device) 44 45 #print_devices(device_list, device) 46 47 try: 48 while True: 49 #現在時刻取得 50 now = datetime.datetime.today() 51 #csvファイルの名前設定 52 filename = "TestRaspi_" + now.strftime("%Y%m%d%H%M%S") + ".csv" 53 54 #ここで1日に設定 55 minute = now.strftime("%M") 56 #変数の初期化 57 filetime = minute 58 59 with open(filename,'a',newline='') as f : #csvファイルの生成 60 writer = csv.writer(f, lineterminator='\n') #csvの書き出し 61 #1行目:見出し 62 writer.writerow(["date", "DO[mg/L]", "watertemp[C]"]) 63 64 while (minute == filetime): #csvに書き込むデータ 65 for dev in device_list: 66 dev.write("R") #測定値出力コマンド 67 68 #現在時刻 69 Datetime_Now = datetime.datetime.today() 70 date = (Datetime_Now.strftime('%Y/%m/%d %H:%M:%S')) 71 #測定値の表示 72 # ex) Success pH 99 : 3.625 73 for dev in device_list: 74 dev_read = dev.read() 75 #replace()メゾッドで余計な文字を消して数値だけ表示 76 replace = dev_read.replace('Success','').replace('DO','')\ 77 .replace('97','').replace('pH','').replace('99','')\ 78 .replace('EC','').replace('100','').replace(' ','').replace(':','') 79 result = (replace[24:29]) 80 #水温センサ 81 sensor = W1ThermSensor() 82 water_temperature = sensor.get_temperature() 83 84 #csvに書き込むデータ 85 data = [date,result,water_temperature] 86 writer.writerow(data) 87 #ターミナルに出力 88 print('--------------------------------') 89 print(date) 90 print(dev_read) 91 print("water-temperature:{0:.2f}".format(water_temperature)) 92 93 time.sleep(5) #5秒に設定 94 95 #1日毎にcsvファイルを生成 96 filetime = Datetime_Now.strftime("%M") 97 98 except KeyboardInterrupt: # catches the ctrl-c command, which breaks the loop above 99 print("Continuous polling stopped") 100 101 102if __name__ == '__main__': 103 main()

実行結果
イメージ説明

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

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

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

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

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

guest

回答1

0

複雑なことをやらずに、
[[date, DO[mg/L], watertemp[C]],
[2022/02/14 10:00:00, 6.62, 20.00],
[2022/02/14 10:00:05, 6.73, 20.00],
... ]
というリストのリストを作成した後で
csv.writerowsを使って一気に書き込むことをお勧めします。

参考
PythonでCSVファイルを読み込み・書き込み(入力・出力)

投稿2022/02/14 06:40

ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問