[pyar] csvreader no acepta list objects

Luis Andraschnik luis.andraschnik en gmail.com
Jue Jun 14 15:33:02 -03 2018


Si claro , uso bastante Pandas y Numpy. Cómo estoy haciendo una appweb que
corre en una Raspi, para no usar la memoria sd como disco estoy
reescribiendo mis utilidades para trabajar en memoria con file-like
objects. Por eso tengo que verificar que parámetros de entrada tienen esas
funciones y clases.

Por ejemplo, ahora estoy con un formato binario de espectros que se llama
Thermograms (.SPC) y me topé con que el módulo de terceros  (spc.py) que
uso para leerlos, sólo acepta file-path , así que tuve que hacer un nuevo
módulo "spc_new.py" dónde hago una clase customFile que hereda de spc.File,
sobreescribo el método __init__, cambio un par de líneas y voilá!!!

Lo que no me esperaba era que en el módulo con mi nueva clase tengo que
hacer los mismos imports que contiene el módulo original.No basta, ni sirve
para nada,  con importar el módulo original y todo su espacio de nombres.

Saludos
Luis

El 13 de junio de 2018, 12:22, Gastón Paris <gastonparis en gmail.com>
escribió:

> Hola Luis,
>
> Lo querés hacer con pandas te va a ahorrar dolores de cabeza y varias
> lineas de código.
>
> Primero creas un dataframe con pandas que es una tabla
>
> import pandas as pd
>
> csv_list = [['Spam', 'Spam', 'Spam', 'Spam', 'Spam'], ['Baked Beans',
> 'Spam', 'Lovely Spam', 'Wonderful Spam']]
>
> df = pd.DataFrame(csv_list)
>
> print(df)
>
>              0     1            2               3     4
> 0         Spam  Spam         Spam            Spam  Spam
> 1  Baked Beans  Spam  Lovely Spam  Wonderful Spam  None
>
>
> Fijate que el dato que falta le pone None. Además le agrega encabezado e índice que se pueden cambiar a lo que te guste.
>
>
> Luego lo salvas en CSV
>
>
> df.to_csv('csvfile.csv', header = False, index = False)
>
>
> #Contenido del archivo
>
> Spam,Spam,Spam,Spam,Spam
> Baked Beans,Spam,Lovely Spam,Wonderful Spam,
>
>
> Finalmente podés leerlo de nuevo
>
>
> df_de_archivo = pd.read_csv('csvfile.csv', header = None)
>
> print(df_de_archivo)
>
>
>              0     1            2               3     4
> 0         Spam  Spam         Spam            Spam  Spam
> 1  Baked Beans  Spam  Lovely Spam  Wonderful Spam   NaN
>
>
> Fijate que cambio el None por NaN, esto también se puede controlar.
>
>
> Un abrazo
>
>
> Gastón
>
>
> On Tue, Jun 12, 2018 at 8:21 PM Sebastián Schiavinato <
> seba.schiavinato en gmail.com> wrote:
>
>> Usar pandas o más bajo nivel Numpy? Pandas es muy resilente respecto a
>> datos faltantes y esas cosas, muy util si viene de algún microcontrolador.
>>
>> Si querés usar el paquete csv tenés que hacer a mano la lectura. Podés
>> leer todo el archivo, splitear por los CR (o LF, lo que sea) y luego por
>> las comas o separadores. Y ahí tenés lista de listas
>>
>> Saludos
>>
>> On Tue, 12 Jun 2018 at 16:57, Luis Andraschnik <
>> luis.andraschnik en gmail.com> wrote:
>>
>>> Pretendía modelar en memoria un archivo csv  como lista de listas y ver
>>> si para procesarlo me servía para algo el módulo csvreader o lo hago a
>>> manopla. Para trabajar en una raspberrypi/Flask sin que se graben en la
>>> tarjeta de memoria los datos haría un upload (en memoria), un procesamiento
>>> y devolver un archivo
>>>
>>> Salu2
>>> Luis
>>>
>>> 2018-06-12 16:37 GMT-03:00 Tomas Zulberti <tzulberti en gmail.com>:
>>>
>>>>
>>>>
>>>> On Tue, Jun 12, 2018 at 4:30 PM, Luis Andraschnik <
>>>> luis.andraschnik en gmail.com> wrote:
>>>>
>>>>> Hola gente
>>>>>
>>>>> Según la doc de Python 3.6 :
>>>>>
>>>>> csv.reader(*csvfile*, *dialect='excel'*, ***fmtparams*)
>>>>>
>>>>> Return a reader object which will iterate over lines in the given
>>>>> *csvfile*. *csvfile* can be any object which supports the iterator
>>>>> <https://docs.python.org/3/glossary.html#term-iterator> protocol and
>>>>> returns a string each time its __next__() method is called — file
>>>>> objects <https://docs.python.org/3/glossary.html#term-file-object>
>>>>> and ---->>****list objects**** <<-------are both suitable
>>>>> ¿Porqué esto no funciona?
>>>>>
>>>>> import csv
>>>>> csv_list = [['Spam', 'Spam', 'Spam', 'Spam', 'Spam'], ['Baked Beans',
>>>>> 'Spam', 'Lovely Spam', 'Wonderful Spam']]
>>>>> with open(csv_list) as csvfile:
>>>>>     spamreader = csv.reader(csvfile, delimiter=',', quotechar="'")
>>>>>
>>>>
>>>>>
>>>>> Traceback (most recent call last):
>>>>>   File "prueba.py", line 3, in <module>
>>>>>     with open(csv_list) as csvfile:
>>>>> TypeError: invalid file: [['Spam', 'Spam', 'Spam', 'Spam', 'Spam'],
>>>>> ['Baked Beans', 'Spam', 'Lovely Spam', 'Wonderful Spam']]
>>>>>
>>>>>
>>>> Lo que no esta funcionando es el `open(csv_list)`. O sea, que en tu
>>>> caso deberias directamente hacer:
>>>>
>>>> import csv
>>>> csv_list = [['Spam', 'Spam', 'Spam', 'Spam', 'Spam'], ['Baked Beans',
>>>> 'Spam', 'Lovely Spam', 'Wonderful Spam']]
>>>> csv.reader(csv_list, delimiter=',', quotechar="'")
>>>>
>>>>
>>>> De todas formas, no entiendo muy bien lo que estas intentando de hacer
>>>> porque eso tampoco funciona
>>>> ya que la lista, deberia ser una lista de strings y no una lista de
>>>> listas. O sea, deberia ser algo asi:
>>>>
>>>> csv_list = ['Spam,Spam,Spam,Spam,Spam', 'Baked Beans,Spam,Lovely
>>>> Spam,Wonderful Spam']
>>>>
>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>> Sitio web: http://www.python.org.ar/
>>>>>
>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>
>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>>> Argentina - http://www.usla.org.ar
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>> Sitio web: http://www.python.org.ar/
>>>>
>>>> Para administrar la lista (o desuscribirse) entrar a
>>>> http://listas.python.org.ar/listinfo/pyar
>>>>
>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>> Argentina - http://www.usla.org.ar
>>>>
>>>
>>> _______________________________________________
>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>> Sitio web: http://www.python.org.ar/
>>>
>>> Para administrar la lista (o desuscribirse) entrar a
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>
>>
>>
>> --
>> Sebastián Schiavinato
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
>
>
> --
> Gastón Paris
> gastonparis en gmail.com
>
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180614/04ac8a60/attachment-0001.html>


Más información sobre la lista de distribución pyar