Arrojar
Aquí tengo 200 archivos CSV separados nombrados de SH (1) a SH (200). Quiero fusionarlos en un solo archivo CSV. ¿Cómo puedo hacerlo?
Wisty
Como dijo ghostdog74, pero esta vez con encabezados:
with open("out.csv", "ab") as fout:
# first file:
with open("sh1.csv", "rb") as f:
fout.writelines(f)
# now the rest:
for num in range(2, 201):
with open("sh"+str(num)+".csv", "rb") as f:
next(f) # skip the header, portably
fout.writelines(f)
-
puedes usar
f.__next__()
en cambio sif.next()
en python3.x.– tsveti_iko
29 de enero de 2018 a las 14:30
-
Sólo una nota: Uno puede usar el
with open
sintaxis y evitar manualmente.close()
ing los archivos.– Fatih Akici
8 de junio de 2018 a las 18:18
-
Cuál es la diferencia entre
f.next()
yf.__next__()
? cuando uso el primero, tengo'_io.TextIOWrapper' object has no attribute 'next'
– Jason Gol
8 sep 2018 a las 0:40
-
antes
fout.write(line)
Yo lo haría:if line[-1] != '\n': line += '\n'
– shisui
25 de octubre de 2018 a las 0:48
-
@tsveti_iko: Portable, lo harías
next(f)
que funciona en todas las versiones de Python desde la 2.6 en adelante.– ShadowRanger
14 de noviembre de 2022 a las 19:06
¿Por qué no puedes simplemente sed 1d sh*.csv > merged.csv
?
¡A veces ni siquiera tienes que usar python!
-
En Windows, C:\> copiar *.csv merged.csv
– ataque aéreo
17 de junio de 2011 a las 13:30
-
Copie la información del encabezado de un archivo: sed -n 1p some_file.csv > merged_file.csv Copie todas las líneas menos la última de todos los demás archivos: sed 1d *.csv >> merged_file.csv
– se comporta
11/10/2011 a las 17:39
-
@blinsay Sin embargo, también agrega el encabezado en cada archivo CSV al archivo combinado.
– mina
2 de mayo de 2014 a las 1:51
-
¿Cómo usa este comando sin copiar la información del encabezado para cada archivo subsiguiente después del primero? Parece que la información del encabezado aparece repetidamente.
– José
27 de agosto de 2014 a las 4:57
-
¡Esto es genial si no necesita eliminar el encabezado!
– Blairg23
04/01/2016 a las 22:28
scottlittle
Use la respuesta aceptada de StackOverflow para crear una lista de archivos csv que desea agregar y luego ejecute este código:
import pandas as pd
combined_csv = pd.concat( [ pd.read_csv(f) for f in filenames ] )
Y si desea exportarlo a un solo archivo csv, use esto:
combined_csv.to_csv( "combined_csv.csv", index=False )
-
@wisty,@Andy, supongamos que todos los archivos tienen títulos para cada fila, algunas filas con títulos diferentes. No hay encabezados para las 2 columnas en cada archivo. ¿Cómo se puede fusionar, de modo que para cada archivo solo se agregue una columna?
– Gathide
6 de enero de 2017 a las 11:14
-
¿A dónde se exporta el archivo?
– usuario2398046
5 de diciembre de 2017 a las 17:52
-
@ Dirtysocks45, cambié la respuesta para hacer esto más explícito.
– scottlittle
6 de diciembre de 2017 a las 17:51
-
agregar ordenación: combine_csv = pd.concat( [pd.read_csv(f) for f in filenames ]ordenar=Falso)
– pez vela009
19 de septiembre de 2019 a las 4:28
-
¡para miles de archivos csv se necesita mucho tiempo y mucha memoria!
– SIslam
9 de julio de 2022 a las 7:47
fout=open("out.csv","a")
for num in range(1,201):
for line in open("sh"+str(num)+".csv"):
fout.write(line)
fout.close()
Norfeldt
Solo voy a lanzar otro ejemplo de código a la cesta:
from glob import glob
with open('singleDataFile.csv', 'a') as singleFile:
for csvFile in glob('*.csv'):
for line in open(csvFile, 'r'):
singleFile.write(line)
-
@Andy No veo la diferencia entre stackoverflow que me recuerda que vote una respuesta y yo que le recuerdo a la gente que comparta su agradecimiento (votando) si encuentran útil mi respuesta. Sé que esto no es Facebook y no soy un cazador de likes..
– Norfeldt
1 mayo 2014 a las 10:20
-
Ha sido discutido previamentey cada vez que ha sido considerado inaceptable.
– Andy
♦1 mayo 2014 a las 13:02
alex martelli
Depende de lo que quiera decir con “fusionar”: ¿tienen las mismas columnas? ¿Tienen encabezados? Por ejemplo, si todos tienen las mismas columnas y no tienen encabezados, la concatenación simple es suficiente (abra el archivo de destino para escribir, recorra las fuentes abriendo cada una para lectura, use Shutil.copyfileobj desde la fuente abierta para lectura hasta el destino abierto para escritura, cierre la fuente, siga recorriendo — use el with
declaración para hacer el cierre en su nombre). Si tienen las mismas columnas, pero también encabezados, necesitará un readline
en cada archivo de origen excepto el primero, después de abrirlo para leerlo antes de copiarlo en el destino, para omitir la línea de encabezados.
Si los archivos CSV no tienen todos las mismas columnas, entonces debe definir en qué sentido los está “fusionando” (¿como un SQL JOIN? ¿O “horizontalmente” si todos tienen la misma cantidad de líneas? etc, etc. ) — es difícil para nosotros adivinar lo que quiere decir en ese caso.
-
@Andy No veo la diferencia entre stackoverflow que me recuerda que vote una respuesta y yo que le recuerdo a la gente que comparta su agradecimiento (votando) si encuentran útil mi respuesta. Sé que esto no es Facebook y no soy un cazador de likes..
– Norfeldt
1 mayo 2014 a las 10:20
-
Ha sido discutido previamentey cada vez que ha sido considerado inaceptable.
– Andy
♦1 mayo 2014 a las 13:02
gogocatmario
Bastante fácil de combinar todos los archivos en un directorio y fusionarlos
import glob
import csv
# Open result file
with open('output.txt','wb') as fout:
wout = csv.writer(fout,delimiter=",")
interesting_files = glob.glob("*.csv")
h = True
for filename in interesting_files:
print 'Processing',filename
# Open and process file
with open(filename,'rb') as fin:
if h:
h = False
else:
fin.next()#skip header
for line in csv.reader(fin,delimiter=","):
wout.writerow(line)
¿De qué manera los fusionarías? (Concatenar líneas, …)
– girando
25 de marzo de 2010 a las 0:29
¿Cómo quieres que se fusionen? Cada línea en un archivo CSV es una fila. Entonces, una opción simple es concatenar todos los archivos juntos.
– Jon Eric
25 de marzo de 2010 a las 0:31
Cada archivo tiene dos columnas. Quiero fusionarlos en un solo archivo con dos columnas consecutivas.
– mandril
25 de marzo de 2010 a las 12:29
@Chuck: ¿Qué tal tomar todas las respuestas en sus comentarios (a la pregunta ya las respuestas) y actualizar su pregunta?
– tumultous_rooster
17 de agosto de 2015 a las 19:29
Esta pregunta debe llamarse “¿Cómo concat…” en lugar de “cómo unir…”
– colidiro
5 de agosto de 2018 a las 10:09