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 <[email protected]>
Para: La lista de python en castellano <[email protected]> 
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
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a