[pyar] csvreader no acepta list objects

Juan Carizza juan.carizza en gmail.com
Jue Jun 14 15:59:33 -03 2018


Hola Luis, interpretando lo que dice la documentación el primer parámetro
es un file object [0], y lo que estas pasando es
una objeto de tipo lista que no implementa ninguno de los métodos .read() o
.write() que te está pidiendo.

Lo que estás intentando se hace con StringIO  [1] que genera un objeto
"file-like" para que puedas usar:

import csv
import io

csv_file = io.StringIO('''col1,col2,col3
hola,mundo,python
''')

with csv_file as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',', quotechar="'")
    for x in spamreader:
        print(x)


[0] https://docs.python.org/3/glossary.html#term-file-object
[1] https://docs.python.org/3/library/io.html
[3] https://onlinegdb.com/BkWCcExZm

El 14 de junio de 2018, 15:33, Luis Andraschnik<luis.andraschnik en gmail.com>
escribió:

> 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
>>
>
>
> _______________________________________________
> 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/22304a9b/attachment-0001.html>


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