[Python-es] Salto de linea

Luis Garcia Merino lgmerino en yahoo.com
Mar Oct 16 13:22:34 CEST 2012


Buenas,

supongo que es porque el archivo CSV, al final de cada fila, tiene un salto de línea. Imagino también que row[5] es la última columna del CSV y, por lo tanto, tiene ese salto de línea. Podrías solucionarlo haciendo:

s = row[2]+" "+row[5][:-1]

en vez de 


s = row[2]+" "+row[5]



Yo uso esto para limpiar las celdas de un CSV (y pasarlas a utf-8):

def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):
    

    csv_reader = csv.reader(unicode_csv_data,dialect=dialect, **kwargs)

    for row in csv_reader:
        # en el yield puedes hacer lo que quieras con la celda... por ejemplo .strip() o el lower() que haces tu
        yield [unicode(cell.replace("\n",""), 'utf-8') for cell in row]



def haz_lo_que_sea_con_el_csv( csv_file ):

    f =open(csv_file, 'r')


    csv_reader = unicode_csv_reader( f )

    # con esto lees una línea
    row = csv_reader.next()


No sé si es la mejor manera de hacerlo, pero funciona :)


Un saludo.



________________________________
 De: kausdiv <kausdiv en gmail.com>
Para: La lista de python en castellano <python-es en python.org> 
Enviado: Martes 16 de octubre de 2012 12:56
Asunto: [Python-es] Salto de linea
 
Hola.

os comento algo que me pasa casi siempre que uso ficheros. :-(

Tengo un archivo CSV donde hay muchas lineas repetidas. He preparado el siguiente programa que busca los registros repetidos.
La idea es que se crea un nuevo archivo "bb.css" donde van todos los registros menos los repetidos.

El problema es que se agrega un salto de linea que no debería ("\n") de forma que el resultado es algo as:
---------
linea ok

linea ok
---------
Entre cada linea ok hay una linea en blanco.

Este es el programa:
-----------------------------------------
import csv

cn=0 # para contar reptediso
farchi="aa.csv"  # archivo con todos los registros
cm=[]  # Para poder conocer los repetidos.

f=open("bb.csv","w")  # Archivo destino con los registros sin repetir.
swriter = csv.writer(f, delimiter=',')

with open(farchi, 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',')
    for row in spamreader:
        if len(row)>5:
            s = row[2]+" "+row[5]
            s = s.lower()
            if s in cm:
                cn += 1
            else:
                cm.append(s)
                swriter.writerow(row)

f.close()

print "Registros duplicados ",cn
_______________________________________________
Python-es mailing list
Python-es en python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20121016/db9fe490/attachment.html>


Más información sobre la lista de distribución Python-es