Jump to content

Criação num dicionário com dados em txt


luga

Recommended Posts

Olá,

Estou com dificuldades para criar o código para um dicionário com importação dos dados em .txt. O ficheiro .txt tem mais de 40.000 linhas  e cada linha tem à esquerda 6 dígitos (tempo) comum a todos os códigos na mesma linha, seguidos por dois  bytes hexadecimal do identificador (XX XX), 2 dígitos decimal (XX) que indicam o número de bytes de dados (hexadecimal), exemplo de uma linha:

 

030447 03 28 08 ff ff 81 00 1f c1 ff ff 03 00 08 00 08 00 ff 00 00 03 80 02 12 02 00 00

030447 -> tempo (decimal)

03 28; 03 00; 02 12  -> identificador (hexadecimal)

08; 08; 02 -> número de pares de dígitos (decimal)

ff ff 81 00 1f c1 ff ff;  00 08 00 ff 00 00 ff 03 80; 00 00 -> dados hexadecimal.

Cada linha não tem um número fixo de códigos, pode ter mais ou menos. Antecipadamente agradeço pela ajuda.

Link to comment
Share on other sites

Os dados estão separados por espaços tal-qual como apresentaste aqui? É que em caso afirmativo, a solução pode-se tornar bastante mais simples.

A ideia, nesse caso, será separar a string pelos espaços e a partir daí fazer um ciclo que vai consumindo a lista de strings geradas.

s = "030447 03 28 08 ff ff 81 00 1f c1 ff ff 03 00 08 00 08 00 ff 00 00 03 80 02 12 02 00 00"
l = s.split(' ')
tempo, l = int(l[0]), l[1:]
identificador, pares = [], []

while True:
    try:
        pares.append(l[0:2])
        l = l[2:]
        num, l = int(l[0]), l[1:]
        identificador.append(l[0:num])
        l = l[num:]
        if l == []:
            break
    except _:
        break

identificador = list(map(lambda x: " ".join(x), identificador))
pares = list(map(lambda x: " ".join(x), pares))

print("Tempo = {0}\nIDs = {1}\nPares = {2}\n".format(tempo, identificador, pares))

Neste exemplo não faço nenhum tipo de verificação de erros. Simplesmente assumo que todas as linhas estão correctamente formatadas. Trabalho adicional pode ser implementado nesse sentido.

Cumprimentos.

Edited by thoga31
Link para Ideone

Knowledge is free!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.