databuffer += data_str TypeError: может объединять только строку str (не _io.TextIOWrapper) с строкой

Я пытаюсь анимировать свои данные с датчика LIDAR, но при попытке анимировать я получил эту ошибку! Помогите решить проблему, я новичок в программировании на Python, большое спасибо!

Это проблема, которая у меня возникла:

Файл "C:\Users\cemal\AppData\Local\Programs\Python\Python37-32\veritipleriogrenme.py", строка 29, в анимированном буфере данных += data_str TypeError: может только конкатенировать str (не "_io.TextIOWrapper") в ул

Это набор данных, который я пытаюсь анимировать:

0.0,0.0
0.0,269.1
0.0,270.3
0.0,271.5
1617.8,265.6
1627.3,266.8
1629.0,268.0
1633.0,269.2

тип моего набора данных - строка!


import matplotlib.pyplot as plot
import math
from matplotlib import style
import matplotlib.animation as animation 
import numpy as np
fig=plot.figure(figsize=(4,4))
ax = fig.add_subplot(111, projection='polar')
ax.set_ylim(0,2000)
data = np.zeros(360)
theta = np.linspace(0,360, num=360)
l,  = ax.plot([],[])

databuffer = ""
uzaklik = np.zeros(360)
pol = np.linspace(0,360, num=360)
def animate(i):
    global data, databuffer
    data_str = open(r"C:\Users\cemal\OneDrive\Masaüstü\veri2.txt","r")
    databuffer +=  data_str
    aci=np.linspace(0,360, num=360)
    cap=np.zeros(360)
    p_pol=np.linspace(0,360, num=360)
    p_uzaklik=np.zeros(360)
    aci2=np.linspace(0,360, num=360)
    cap=np.zeros(360)
    for x in data_str:
        pol =x.partition(",")[2].rstrip()
        uzaklik =x.split(',')[0]
        try:

            p_pol=float(pol.strip().strip("'"))
            p_uzaklik=float(uzaklik.strip().strip("'"))

            aci=np.append(p_pol)
            cap=np.append(p_uzaklik)
            aci2=[math.radians(i) for i in aci]
            l.set_data(cap, aci2 )
            data_buffer=""

            return l, 

        except ValueError:
            continue

ani = animation.FuncAnimation(fig, animate,interval=10000)
plot.show()

person cemaldagli    schedule 26.03.2019    source источник
comment
Не могли бы вы опубликовать код, который вы используете, который вызывает эту ошибку? Не видя, что вы делаете, мы можем только догадываться, в чем может быть проблема.   -  person Hoog    schedule 26.03.2019
comment
Это немного лучше, но вставка текста кода в вопрос поможет гораздо больше! Просто скопируйте и вставьте его в конец вашего вопроса, выделите все это и нажмите кнопку {}, чтобы отформатировать его красиво. Это позволяет нам копировать и вставлять то, что у вас есть, чтобы быстро увидеть, в чем проблема. Если я хочу попробовать ваш код сейчас, мне придется много печатать.   -  person Hoog    schedule 26.03.2019


Ответы (1)


open создает буферизованную программу чтения. есть много видов буферизованных ридеров; в данном случае это программа чтения с буферизацией текста. Сам считыватель не может рассматриваться как строка, НО, если вы скажете своему коду прочитать содержимое, вы получите тип данных, эквивалентный буферизованному считывателю (байты из буферизованного считывателя BytesIO и строка из TextIOWrapper)

Я бы немного почитал о буферизованных ридерах, так как это определенно пригодится в будущем, здесь

Этот код также демонстрирует, как вы можете использовать буферизованный считыватель для своих целей (с некоторыми изменениями в именах переменных, чтобы они лучше соответствовали типу переменной):

data_buffer = ""
data_str_wrapper = open(r"C:\Users\cemal\OneDrive\Masaüstü\veri2.txt","r")
try:
    str += data_str_wrapper
except Exception as e:
    print("Can't combine strings and wrappers")
    print(e)
data_buffer += data_str_wrapper.read()
print("Now that i've read the buffer, I can treat it like a string")
print(data_buffer)

По сути, вам нужно, чтобы data_buffer добавлял read версию содержимого оболочки, поэтому там, где у вас есть databuffer += data_str, вы действительно должны делать databuffer += data_str.read()

person Richard Stoeffel    schedule 27.03.2019