braincrash Posted December 18, 2015 at 10:18 AM Report Share #590824 Posted December 18, 2015 at 10:18 AM Bom Dia, A ver se me conseguem dar uma dicas, já andei por aqui à procura mas não consegui encontrar o que pretendia. Ando a tentar extrair informação de um ficheiro de texto, esse texto está segmentado por vários blocos, queria conseguir agarrar o bloco, a partir de um inicio (/START) e um fim (/END), para depois dentro deste bloco conseguir extrair dados que vão variando. Exemplo: /START <cmd restult_of_cmd <cmd result_of_cmd /END /START <cmd restult_of_cmd <cmd result_of_cmd /END /START <cmd restult_of_cmd <cmd result_of_cmd /END /START <cmd restult_of_cmd <cmd result_of_cmd /END /START <cmd restult_of_cmd <cmd result_of_cmd /END Será que me conseguem apontar para alguns tutoriais? Obrigado. Link to comment Share on other sites More sharing options...
thoga31 Posted December 18, 2015 at 03:12 PM Report Share #590831 Posted December 18, 2015 at 03:12 PM Com esse exemplo, que é essencialmente a repetição da mesma coisa por várias vezes, não consigo perceber exactamente o que pretendes extrair e de que forma queres guardar. Knowledge is free! Link to comment Share on other sites More sharing options...
braincrash Posted December 21, 2015 at 11:15 AM Author Report Share #590904 Posted December 21, 2015 at 11:15 AM Aqui a ideia do exemplo era apenas a estrutura, o resultado dos comandos não vai ser sempre o mesmo. Link to comment Share on other sites More sharing options...
thoga31 Posted December 21, 2015 at 11:28 PM Report Share #590926 Posted December 21, 2015 at 11:28 PM Sim, eu percebi que era a estrutura, mas não consegui perceber como queres guardar a informação que vais ler. Entre cada /START e /END há um número definido ou indefinido de comandos e respectivos resultados? Cada comando começa sempre com o sinal de menor, <? Queres guardar os pares (comando, resultado) ou só um deles? A informação é para ser guardada numa lista? São estas informações que precisamos para te podermos orientar. Knowledge is free! Link to comment Share on other sites More sharing options...
djthyrax Posted December 28, 2015 at 04:28 PM Report Share #591104 Posted December 28, 2015 at 04:28 PM Eu começaria por usar regex para ir buscar os blocos entre o start e o end. Depois limitava-me a utilizar o split para separar os parágrafos pelas linhas vazias e depois extraia o comando e a resposta. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
pwseo Posted December 30, 2015 at 02:16 PM Report Share #591138 Posted December 30, 2015 at 02:16 PM braincrash, Podes utilizar a solução do djthyrax ou, em alternativa, podes processar o ficheiro uma linha de cada vez, decidindo se estás ou não perante um bloco delimitado por /START,/END e, dentro de cada bloco, se estás perante um comando ou um resultado. Entretanto já passaram alguns dias desde que te responderam; conseguiste solucionar o teu problema? Se sim, como? Link to comment Share on other sites More sharing options...
Solution pwseo Posted February 7, 2016 at 05:49 PM Solution Report Share #593251 Posted February 7, 2016 at 05:49 PM Como nunca mais se pegou neste tópico, decidi colocar aqui a minha resposta (e marcar como resolvido). Utilizei generators para ter maior flexibilidade nos ciclos: # encoding: UTF-8 from sys import stdin def blocks(lines): # Remover o '\n' de todas as linhas lines = (e.strip() for e in lines) for l in lines: if l == '/START': block = [] elif l == '/END': # Devolver um bloco e aguardar pela próxima iteração yield block else: block.append(l) for b in blocks(stdin): print(b) E aqui fica a execução: ~ $ # Dados originais do braincrash ~ $ python3 bc.py < bc.txt ['<cmd', 'restult_of_cmd', '<cmd', 'result_of_cmd'] ['', '<cmd', 'restult_of_cmd', '', '<cmd', 'result_of_cmd', ''] ['', '<cmd', 'restult_of_cmd', '', '<cmd', 'result_of_cmd', ''] ['', '<cmd', 'restult_of_cmd', '', '<cmd', 'result_of_cmd', ''] ['', '<cmd', 'restult_of_cmd', '', '<cmd', 'result_of_cmd', ''] ~ $ ~ $ # Dados modificados para ser mais fácil identificar os diferentes blocos ~ $ python3 bc.py < bc-mod.txt ['<cmd', 'result_of_cmd1', '<cmd', 'result_of_cmd'] ['', '<cmd', 'result_of_cmd2', '', '<cmd', 'result_of_cmd', ''] ['', '<cmd', 'result_of_cmd3', '', '<cmd', 'result_of_cmd', ''] ['', '<cmd', 'result_of_cmd4', '', '<cmd', 'result_of_cmd', ''] ['', '<cmd', 'result_of_cmd5', '', '<cmd', 'result_of_cmd', ''] 1 Report 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