[Python] Duda, no sé cómo hacerlo

Draxler10

Antes de nada, decir que no tengo idea alguna de Python ni de ningún otro Lenguaje de programación, estoy navegando por webs buscando cómo hacer lo que necesito, pero llevo días atascado en el mismo paso

Estoy usando Raspberry PI 3 con el modulo Sense Hat, usando el Sense Hat para recoger la información de los sensores que trae.
Mi intención es almacenar la información que recoge el Sense Hat en un archivo CSV para llevar esa información a excel y hacer gráficas con ella

Quizá me he explicado super mal, estoy siguiendo este tutorial: https://projects.raspberrypi.org/en/projects/sense-hat-data-logger
El paso 2, Getting data from the Sense Hat lo tengo completo, funciona perfectamente, pero al llegar al paso 3 "Writing the data to a file" me pierdo por completo y no sé dónde tengo que poner lo que sale ahí

(El código completo del paso 2 sería este)

spoiler
Unrack

En el I need a hint directamente te lo escriben. Basta con que lo copies.

HeXaN

Edit: ya veo que la misma página te lo dice.

1 respuesta
Draxler10

He escrito lo que pone en el I need a Hint, pero debo escribirlo en un sitio diferente al que debería de ir y me da error todo el rato

Draxler10

#3 En la página lo pone todo, pero no entiendo cómo utilizarlo, yo lo había puesto así:

spoiler

Pero al parecer no debe ir así porque me da error todo el rato..

1 respuesta
Unrack

#5 Ponlo en el orden en el que te lo exponen en la página.

1 respuesta
Draxler10

#6 eso es lo que he hecho, creo... no?

1 respuesta
Unrack

#7 No, lo tienes mezclado. Mantén la función get_sense_data como la tenías al inicio y la parte de escritura la tienes que colocar después. Puedes entenderlo como sustitución del print que tenias en el while true

Draxler10

Así??

spoiler
1 respuesta
Unrack

#9 No se si estas respetando la identación bien pero el while true[/i tiene que estar dentro del bloque with[/i. Y lo que añades al fichero es lo que contiene la variable data[/i

Draxler10

Creo que así estaría bien..?

Esta función

data_writer.writerow(['temp','pres','hum',
	                  'yaw','pitch','roll',
                      'mag_x','mag_y','mag_z',
                      'acc_x','acc_y','acc_z',
                      'gyro_x', 'gyro_y', 'gyro_z',
                      'datetime'])

La tengo que poner: Add this line after you create your writer object and before the while True loop starts
Entonces sería así?

spoiler
Draxler10

Lo he cargado y al darle a iniciar me sale el siguiente error:

Traceback (most recent call last):
data_writer.writerow(data)
ValueError: I/0 operation on a closed file.

1 respuesta
HeXaN

#12 Porque estás poniendo el código de escribir en fichero fuera del with open.

1 1 respuesta
Draxler10

#13 cierto, lo he arreglado y ahora dice
Traceback (most recent call last):
File "/usr/lib/python3.7/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "/home/pi/Desktop/datalogger full.py", line 72
while True:
^

1 respuesta
Draxler10

Nada.. soy inútil, no lo consigo

1 respuesta
Unrack

#15 Es casi imposible ayudarte bien porque no muestras los errores bien, tampoco el código y, además, no sabes lo que estás haciendo. Ese error ni idea donde te aparecerá pero esta relacionado con el parsing que realiza el modulo Abstract Syntax Trees así que estará algo mal escrito en el código casi seguro.

Frankicia

#14 Por lo que veo en el código... entiendo que la función get_sense_data() está bien correctamente identada, no?
En Python las funciones se tabulan para separarlas del código del "main":

variable="esto es del main"
def foo():
<TAB>print (var)
print ($variable)
print (foo())

Después, puedes enseñar las líneas que te fallan y el código completo con número de lineas?
Sin saber las líneas en su contexto poco podemos hacer.

La sintaxis de Python es muy cochina y tardas en acostumbrarte.

Draxler10

No sé a qué os referís con mostrar bien el código

Este es el código "completo"

spoiler

Según he entendido leyéndolo, lo que debe hacer es crear un archivo csv poniéndo como header 'temp','pres' etc. Después, debe registrar los datos que recogen los sensores.

Mi problema es el siguiente

Yo tengo este código, el cuál funciona sin ningún error y me da los valores que recogen los sensores. Mi intención (Y donde llega el error) es que esos valores se queden almacenados para poder trabajar con esos datos, pero ahora mismo lo único que consigo es un spam continuo de los valores que van tomando los sensores, y eso es lo que debería de hacer el código de arriba "completo"

spoiler
2 respuestas
HeXaN

Toma:

spoiler

Pon bien la indentación de la función get_sense_data() que el foro se la fuma.

1 respuesta
B

.

Unrack

#19 tampoco que hay un return por ahí perdido. Ese código está para enterrarlo hehe

#18 Te lo paso a un pastebin y pruebas.

Va sin headers. https://pastebin.com/qnaWGMmM

Intenta probar esto y cuando te funcione sigue con la guía pero leete bien que te explican bastante bien los pasos.

1 respuesta
Unrack

.

Draxler10

#21 DIOS, gracias, gracias, mil gracias.
La cosa es que estaba atascado ahí y no entiendo aún por qué...

Mil gracias a todos por la ayuda y perdón por las molestias..

1 respuesta
Unrack

#23 Tenías batantes cosas innecesarias y otras mal puestas pero el mayor problema era como tenias pues el writer. Pero dijiste que no sabes nada de lenguajes de programación así que no debería preocuparte mucho pero te dejo una explicación sencilla https://effbot.org/zone/python-with-statement.htm.

Usuarios habituales