una - python csv writer example
Python Unirse a los archivos csv donde la clave es el primer valor de la columna (1)
Intento unir dos archivos csv donde la clave es el valor de la primera columna. No hay encabezado
Los archivos tienen diferente número de líneas y filas.
El orden del archivo debe ser preservado.
presentar un:
john,red,34
andrew,green,18
tonny,black,50
jack,yellow,27
phill,orange,45
kurt,blue,29
mike,pink,61
archivo b:
tonny,driver,new york
phill,scientist,boston
resultado deseado:
john,red,34
andrew,green,18
tonny,black,50,driver,new york
jack,yellow,27
phill,orange,45,scientist,boston
kurt,blue,29
mike,pink,61
Examiné todos los temas relacionados y estoy seguro de que algunos de ustedes van a marcar esta pregunta como duplicada, pero aún no he encontrado la solución.
Agarré la solución basada en diccionario, pero este enfoque no maneja el orden de línea de la condición de archivo ''a''.
import csv
from collections import defaultdict
with open(''a.csv'') as f:
r = csv.reader(f, delimiter='','')
dict1 = {}
for row in r:
dict1.update({row[0]: row[1:]})
with open(''b.csv'') as f:
r = csv.reader(f, delimiter='','')
dict2 = {}
for row in r:
dict2.update({row[0]: row[1:]})
result = defaultdict(list)
for d in (dict1, dict2):
for key, value in d.iteritems():
result[key].append(value)
También me gustaría evitar poner estos archivos csv en la base de datos como sqlite o usar el módulo pandas.
Gracias por adelantado
Algo como
import csv
from collections import OrderedDict
with open(''b.csv'', ''rb'') as f:
r = csv.reader(f)
dict2 = {row[0]: row[1:] for row in r}
with open(''a.csv'', ''rb'') as f:
r = csv.reader(f)
dict1 = OrderedDict((row[0], row[1:]) for row in r)
result = OrderedDict()
for d in (dict1, dict2):
for key, value in d.iteritems():
result.setdefault(key, []).extend(value)
with open(''ab_combined.csv'', ''wb'') as f:
w = csv.writer(f)
for key, value in result.iteritems():
w.writerow([key] + value)
produce
john,red,34
andrew,green,18
tonny,black,50,driver,new york
jack,yellow,27
phill,orange,45,scientist,boston
kurt,blue,29
mike,pink,61
(Tenga en cuenta que no me molesté en protegerme contra el caso en el que dict2
tiene una clave que no está en dict1
; eso se agrega fácilmente si lo desea).