Hola Luis. Gracias por contestarme.

Verás row[2] y 5 se guardan en una lista para ir comprobando si existe la linea. Pero no se guarda.

Lo que se guarda es row tal como se lee:
if s in cm:
                cn += 1
    else:
          cm.append(s)
          swriter.writerow(row)
 
Es decir si s (row[2] y row[5]) no esta en la lista cm (donde van estos dos registros unidos.) Entonces garda s en la lista cm para comprobar más adelante y guarda row tal como se leyó en el archivo de salida.

Pero si ves, row no ha sufrido modificación alguna. Eso es lo que me desconcierta. Por cierto probé swriter.writerow(row[:-1]) y no ha funcionado.

¿ que podrá ser ?

Gracias.


El 16/10/2012 13:22, Luis Garcia Merino escribió:
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 <kaus...@gmail.com>
Para: La lista de python en castellano <python-es@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@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/




_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/




_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a