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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4693閲覧

Python3でCSVファイルに書き込みを行おうとするとエラーメッセージが出てしまいます。

VNF

総合スコア7

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/04/18 05:50

Python3にて、日付・時間と、センサーから取得した数値をCSVファイルに書き込もうとするとエラーが出てしまいます。
Python2では、そのまま問題無く動作します。
どのように変更すれば良いのでしょうか。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "temp-csv-cron.py", line 59, in <module> readData() File "temp-csv-cron.py", line 52, in readData writer.writerow([record_time,temp,internal]) TypeError: 'str' does not support the buffer interface

該当のソースコード

Python3

1# -*- coding: utf-8 -*- 2import os 3import datetime 4import csv 5import time, signal, sys 6import Adafruit_GPIO.SPI as SPI 7import Adafruit_MAX31855.MAX31855 as MAX31855 8 9DATA_DIR ='/home/pi/' 10 11# Raspberry Pi software SPI configuration. 12CLK = 25 13CS = 24 14DO = 18 15sensor = MAX31855.MAX31855(CLK, CS, DO) 16 17# Raspberry Pi hardware SPI configuration. 18SPI_PORT = 0 19SPI_DEVICE = 0 20sensor = MAX31855.MAX31855(spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE)) 21 22 23def readData(): 24 #get record_time and date 25 record_datetime = datetime.datetime.now() 26 record_file_name = record_datetime.strftime('%Y%m%d')+'_temp.csv' 27 record_time = record_datetime.strftime('%Y/%m/%d %H:%M') 28 print(record_time) 29 30 #reda temp 31 temp = sensor.readTempC() 32 internal = sensor.readInternalC() 33 34 #Nan processing 35 if temp == temp: 36 temp = temp 37 else: 38 temp =0 39 if internal == internal: 40 internal = internal 41 else: 42 internal =0 43 44 #record data 45 file = os.path.isfile(DATA_DIR+record_file_name) 46 if file == False: 47 writer = csv.writer(open(DATA_DIR+record_file_name,'ab')) 48 writer.writerow(['Time','External','Internal']) 49 writer.writerow([record_time,temp,internal]) 50 else: 51 writer = csv.writer(open(DATA_DIR+record_file_name,'ab')) 52 writer.writerow([record_time,temp,internal]) 53 print(("Temp : " + "%2.2f" % temp + "℃")) 54 print(("Internal : " + "%2.2f" % internal + "℃")) 55 56if __name__ == '__main__': 57 try: 58 readData() 59 except KeyboardInterrupt: 60 61 pass 62 63

試したこと

Python3での文字列とバイト型の関係でのエラーらしいとはわかるのですがどうにも対処法がわかりません。

補足情報(FW/ツールのバージョンなど)

Raspberry pi
Python 2.7.9
Python 3.4.2

色々やってはみたもののどうも上手く対処できません、お手数をお掛けしますがご教授をお願いできないでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

python - Python3 CSV writerows, TypeError: 'str' does not support the buffer interface - Stack Overflow

によると、
これ

python

1writer = csv.writer(open(DATA_DIR+record_file_name,'ab'))

の"ab"を"a"とすれば動くそうです。

投稿2018/04/18 06:08

hayataka2049

総合スコア30933

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

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

VNF

2018/04/18 07:12

本当ですか? "a"だけでしたか。。。 はい、無事にPython3で動作しました。 あれだけ悩んだだけに感動です。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問