Manipular dois arquivos ao mesmo tempo

1. Manipular dois arquivos ao mesmo tempo

André
arsaraiva

(usa Ubuntu)

Enviado em 05/07/2017 - 12:21h

Bom dia Amigos,

Preciso de socorro, kkk.

Sou muito novo em programação, na verdade bem inexperiente e preciso criar um programinha, pode ser em python ou qualquer linguagem como shell script.
Vou explicar minha dúvida: A um tempo atrás um amigo aqui do VOL me ajudou com um script que gera dois arquivos: ARQ_PKT_DADOS_grid_*.log e ARQ_SORVE_grid_*.log o primeiro tem o tempo do envio de um pacote e o segundo o tempo em que o pacote chegou .
Por exemplo:

ARQ_SORVE
65620419488[/b 0 12 [b]12 579 0 6370 //nó que enviou o pacote e o número de controle
127828030169 0 8 16 1158 0 12740 //nó que enviou o pacote e o número de controle
127846409021 0 3 3 1158 1 12741
127865729904 0 7 7 1158 1 12743
....

ARQ_PKT_DADOS
65260043063 30 0 579 0 6633
65275141913 13 0 579 0 6402
65292240729 33 0 579 0 6611
65298153863 34 0 579 0 6446
65303209818 17 0 579 0 6270
65308498919 21 0 579 0 6369
65405166883 6 0 579 0 6380
65407550568 16 0 579 0 6402 //nó transmissor e o controle
65409444195 24 0 579 0 6677
65411232994 23 0 579 0 6479
65478403883 1 0 579 0 6479
65484767022 12 0 579 0 6490 //nó transmissor e o controle
...

O que eu preciso é abrir os dois arquivo (não tenho nem ideia de como se faz isso) e fazer a comparação e depois subtrair os tempos. Abro o ARQ_SORVE, peguei a primeira linha, carrego 3 variáveis (tempo, nó e cont, por exemplo em negrito) com o tempo (este valor no início da linha (65620419488), o valor do nó que enviou(12) e o número de controle(0) (estes exemplos são da primeira linha do arquivo ARQ_SORVE, tenho que fazer linha a linha). Com esses dados, abro o ARQ_PKT_DADOS e vou varrendo linha por linha até achar o valor do nó (12) e o controle corretos(0) (só existe uma entrada e nunca se repete), achando eu carrego o valor do tempo em uma variável qualquer e faço a subtração do tempo armazenado na variável tempo (do ARQ_SORVE) com este tempo do ARQ_PKT_DADOS e armazeno o resultado em um arquivo latencia.txt (por exemplo).
Olhando as linhas 1 e dois do ARQ_SORVE, que casa com as linhas 12 e 8 do ARQ_PKT_DADOS, a subtração é:
65620419488 – 65484767022 = 135652466
127828030169 – 65407550568 = 6242047960

O que me interessa é só o resultado.

Se alguém puder me ajudar nesta empreitada, desde já agradeço.

PS: os * nos nomes dos arquivos é porque armazenam um datetime junto com o nome (ARQ_PKT_DADOS_grid-100617-091322 e ARQ_SORVE_grid-100617-091322) e são 30 arquivos de cada na verdade.




  


2. Re: Manipular dois arquivos ao mesmo tempo

Fernando
phoemur

(usa Debian)

Enviado em 10/07/2017 - 22:35h

só executar no diretorio dos arquivos


#!/usr/bin/env python

import glob
import os

# Achar o arquivo SORVE e o respectivo arquivo PKT com o mesmo timestamp
for f in glob.glob('ARQ_SORVE_grid*'):
SORVE = f
PKT = 'ARQ_PKT_DADOS_grid-' + '-'.join(SORVE.split('-')[1:])
if not os.path.isfile(PKT):
continue


# Abrir ambos os arquivos
with open(SORVE, mode='r') as inf, open(PKT, mode='r') as inf2:
# linha por linha no primeiro arquivo
for linha_sorve in inf.readlines():
linha = linha_sorve.split()
# agora loop no arquivo PKT pra achar a linha correspondente
for linha_pkt in inf2.readlines():
linha2 = linha_pkt.split()
if linha[3] == linha2[1] and linha[5] == linha2[4]:
#calcula latencia e escreve no latencia.txt
latencia = int(linha[0]) - int(linha2[0])
print(latencia)
with open('latencia.txt', mode='a') as outfile:
outfile.write(str(latencia) + '\n')
inf2.seek(0)
break

[phoemur@notebook_lenovo ~/teste]$cat latencia.txt
135652466
62420479601







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts