Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

261
Vistas
Combine dos archivos y agregue cálculo y ordene los datos actualizados en python

Necesito ayuda para hacer el fragmento a continuación. Necesito fusionar dos archivos y realizar cálculos en líneas coincidentes

Tengo oldFile.txt que contiene datos antiguos y newFile.txt con conjuntos de datos actualizados.

Necesito actualizar oldFile.txt en función de los datos en newFile.txt y calcular los cambios en porcentaje. Cualquier idea será de mucha ayuda. Gracias por adelantado

 from collections import defaultdict num = 0 data=defaultdict(int) with open("newFile.txt", encoding='utf8', errors='ignore') as f: for line in f: grp, pname, cnt, cat = line.split(maxsplit=3) data[(pname.strip(),cat.replace('\n','').strip(),grp,cat)]+=int(cnt) sorteddata = sorted([[k[0],v,k[1],k[2]] for k,v in data.items()], key=lambda x:x[1], reverse=True) for subl in sorteddata[:10]: num += 1 line = " ".join(map(str, subl)) print ("{:>5} -> {:>}".format(str(num), line)) with open("oldFile.txt", 'a', encoding='utf8', errors='ignore') as l: l.write(" ".join(map(str, subl)) + '\n')

archivoviejo.txt

 #col1 #col2 #col3 #col4 1,396 c15e89f2149bcc0cbd5fb204 4 HUH_Token (HUH) 279 9e4d81c8fc15870b15aef8dc 3 BABY BNB (BBNB) 231 31b5c07636dab8f0909dbd2d 6 Buff Unicorn (BUFFUN...) 438 1c6bc8e962427deb4106ae06 8 Charge (Charge) 2,739 6ea059a29eccecee4e250414 2 MAXIMACASH (MAXCAS...)

newFile.txt #-- datos actualizados con líneas adicionales que no se encuentran en oldFile.txt

 #col1 #col2 #col3 #col4 8,739 6ea059a29eccecee4e250414 60 MAXIMACASH (MAXCAS...) 138 1c6bc8e962427deb4106ae06 50 Charge (Charge) 860 31b5c07636dab8f0909dbd2d 40 Buff Unicorn (BUFFUN...) 200 9e4d81c8fc15870b15aef8dc 30 BABY BNB (BBNB) #-- not found in the oldFile.txt 20 5esdsds2sd15870b15aef8dc 30 CharliesAngel (CA) 1,560 c15e89f2149bcc0cbd5fb204 20 HUH_Token (HUH)

Necesita mejorar: #-- Con columnas adicionales (col5, col6) y ordenadas según los valores (col3)

 #col1 #col2 #col3 #col4 #col5 (oldFile-newFile) #col6 (oldFile-newFile) 8,739 6ea059a29eccecee4e250414 62 MAXIMACASH (MAXCAS...) 2900.00 % (col3 2-60) 219.06 % (col1 2,739-8,739) 138 1c6bc8e962427deb4106ae06 58 Charge (Charge) 625.00 % (col3 8-50) -68.49 % (col1 438-138) 860 31b5c07636dab8f0909dbd2d 46 Buff Unicorn (BUFFUN...) 566.67 % (col3 6-40) 272.29 % (col1 231-860) 200 9e4d81c8fc15870b15aef8dc 33 BABY BNB (BBNB) 900.00 % (col3 3-30) -28.32 % (col1 279-200) 20 5esdsds2sd15870b15aef8dc 30 CharliesAngel (CA) 0.00 % (col3 0-30) 20.00 % (col1 0-20) 1,560 c15e89f2149bcc0cbd5fb204 24 HUH_Token (HUH) 400.00 % (col3 4-20) 11.75 % (col1 1,396-1,560)
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Solo para dar una solución alternativa basada en convtools , donde puede encontrar piezas útiles:

 from convtools import conversion as c from convtools.contrib.tables import Table # your percentage change calculation def c_change(column_name): return c.if_( c.and_( c.col(f"{column_name}_LEFT"), c.col(f"{column_name}_RIGHT").is_not(None), ), ( (c.col(f"{column_name}_RIGHT") - c.col(f"{column_name}_LEFT")) / c.col(f"{column_name}_LEFT") * 100.0 ).pipe(round, 2), None, ) prepare_columns = { "COLUMN_0": c.col("COLUMN_0").as_type(float), "COLUMN_2": c.col("COLUMN_2").as_type(float), } dialect = Table.csv_dialect(delimiter="\t") sorted_rows = sorted( Table.from_csv("tmp1.csv", dialect=dialect) .update(**prepare_columns) .join( Table.from_csv( "tmp2.csv", dialect=dialect, ).update(**prepare_columns), on=["COLUMN_1", "COLUMN_3"], how="full", ) .update( COLUMN_4=c_change("COLUMN_2"), COLUMN_5=c_change("COLUMN_0"), COLUMN_2=c.col("COLUMN_2_RIGHT"), COLUMN_0=c.col("COLUMN_0_RIGHT"), ) .take( "COLUMN_0", "COLUMN_1", "COLUMN_2", "COLUMN_3", "COLUMN_4", "COLUMN_5", ) .into_iter_rows(tuple), key=lambda row: row[2], reverse=True, ) Table.from_rows(sorted_rows).into_csv("tmp_result.csv", dialect=dialect)

Resultados en:

 COLUMN_0 COLUMN_1 COLUMN_2 COLUMN_3 COLUMN_4 COLUMN_5 8739.0 6ea059a29eccecee4e250414 60.0 MAXIMACASH (MAXCAS...) 2900.0 219.06 138.0 1c6bc8e962427deb4106ae06 50.0 Charge (Charge) 525.0 -68.49 860.0 31b5c07636dab8f0909dbd2d 40.0 Buff Unicorn (BUFFUN...) 566.67 272.29 200.0 9e4d81c8fc15870b15aef8dc 30.0 BABY BNB (BBNB) 900.0 -28.32 20.0 5esdsds2sd15870b15aef8dc 30.0 CharliesAngel (CA) 1560.0 c15e89f2149bcc0cbd5fb204 20.0 HUH_Token (HUH) 400.0 11.75
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda