67 lines
2.5 KiB
Python
67 lines
2.5 KiB
Python
import csv
|
|
import glob
|
|
import os
|
|
import sys
|
|
|
|
# 1. Comprovem si s'ha passat la ruta com a argument
|
|
if len(sys.argv) < 2:
|
|
print("❌ Error: Has d'indicar la ruta de la carpeta.")
|
|
print("💡 Ús correcte: python juntar_csv.py /ruta/de/la/carpeta")
|
|
sys.exit(1)
|
|
|
|
# 2. Agafem la ruta (el primer argument després del nom de l'script)
|
|
carpeta_origen = sys.argv[1]
|
|
|
|
# Netegem possibles cometes que la terminal hagi afegit
|
|
carpeta_origen = carpeta_origen.strip("'").strip('"').strip()
|
|
|
|
# 3. Comprovem que la carpeta existeix
|
|
if not os.path.isdir(carpeta_origen):
|
|
print(f"❌ Error: La ruta '{carpeta_origen}' no és vàlida o no és una carpeta.")
|
|
sys.exit(1)
|
|
|
|
print(f"📁 Cercant fitxers CSV a: {carpeta_origen}")
|
|
|
|
ruta_cerca = os.path.join(carpeta_origen, "*.csv")
|
|
fitxers_csv = glob.glob(ruta_cerca)
|
|
|
|
# Definim el nom del fitxer final
|
|
fitxer_resultat = os.path.join(carpeta_origen, "Newsletter_Combinat_Final.csv")
|
|
|
|
if not fitxers_csv:
|
|
print("⚠️ No s'han trobat fitxers CSV a la carpeta indicada.")
|
|
else:
|
|
# Filtrem per no incloure el fitxer resultat si ja existeix d'una execució anterior
|
|
fitxers_a_processar = [f for f in fitxers_csv if f != fitxer_resultat]
|
|
|
|
if not fitxers_a_processar:
|
|
print("⚠️ Només s'ha trobat el fitxer combinat anterior. No hi ha res de nou per unir.")
|
|
sys.exit(0)
|
|
|
|
print(f"🔄 S'han trobat {len(fitxers_a_processar)} fitxers. Processant...")
|
|
|
|
# 4. Unifiquem els fitxers
|
|
with open(fitxer_resultat, 'w', newline='', encoding='utf-8') as sortida:
|
|
escrivent = csv.writer(sortida, delimiter=';')
|
|
|
|
fitxers_processats = 0
|
|
for nom_fitxer in fitxers_a_processar:
|
|
with open(nom_fitxer, 'r', encoding='utf-8') as f:
|
|
lector = csv.reader(f, delimiter=';')
|
|
try:
|
|
capcalera = next(lector)
|
|
except StopIteration:
|
|
continue # Saltem el fitxer si està completament buit
|
|
|
|
# Escrivim la capçalera només pel primer fitxer vàlid
|
|
if fitxers_processats == 0:
|
|
escrivent.writerow(capcalera)
|
|
|
|
# Escrivim la resta de dades
|
|
for fila in lector:
|
|
escrivent.writerow(fila)
|
|
|
|
fitxers_processats += 1
|
|
|
|
print(f"✅ Èxit! S'han combinat {fitxers_processats} fitxers.")
|
|
print(f"📄 Fitxer creat a: {fitxer_resultat}") |