[pyar] csvreader no acepta list objects

Gastón Paris gastonparis en gmail.com
Mie Jun 13 12:22:22 -03 2018


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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180613/cf008bb6/attachment.html>


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