luga Posted January 17, 2021 at 10:46 PM Report Share #621000 Posted January 17, 2021 at 10:46 PM 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 More sharing options...
thoga31 Posted January 18, 2021 at 02:41 AM Report Share #621002 Posted January 18, 2021 at 02:41 AM (edited) 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 January 18, 2021 at 02:43 AM by thoga31 Link para Ideone Knowledge is free! Link to comment Share on other sites More sharing options...
luga Posted January 18, 2021 at 08:02 AM Author Report Share #621003 Posted January 18, 2021 at 08:02 AM bom dia muito obrigado pela ajuda, vou testar. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now