[Python] unire dati da due csv

Andrea Ambu andreambu a gmail.com
Sab 16 Ott 2010 18:59:38 CEST


2010/10/16 Simone Gabbriellini <simone.gabbriellini a gmail.com>:
> č corretto, perņ nel mio caso la lista dei nomi nei due csv non ha lo stesso ordine. potrei ordinarle perņ prima di iniziare il merge?
>

No, ordinarli prende tempo, e probabilmente il doppio della memoria,
se non sono tantissime righe (x colonne) conviene salvare un csv
(quello con meno colonne) tutto in memoria e poi iterare sul secondo e
scrivere al volo sul csv


def csv_merge(csvr_a, csvr_b, csvw_out):
    a_dict = {}
    a_fieldnames = None
    for row_a in csvr_a:
        if a_fieldnames == None:
            a_fieldnames = row_a
        else:
            a_dict[row_a[0]] = row_a

    b_fieldnames = None
    for row_b in csvr_b:
        if b_fieldnames == None:
            b_fieldnames = row_b
            csvw_out.writerow(a_fieldnames + b_fieldnames[1:])
        else:
            csvw_out.writerow(a_dict[row_b[0]] + row_b[1:])

csv_out = csv.writer(open('out.txt', "w+"))
csv_merge(coordReader, nodesReader, csv_out)



se dai come primo parametro il csv con meno colonne č meglio.


-- 
Andrea


Maggiori informazioni sulla lista Python