quinta-feira, 8 de janeiro de 2015

Teste Final - Pergunta 4

Esta pergunta envolvia manipular um ficheiro em que cada linha é formada por um nome seguido de um ou mais números inteiros. O objectivo é criar um novo ficheiro, deixando o antigo inalterado, adicionando no final de cada linha a soma dos números dessa linha. Valorizava-se uma solução em que as linhas no ficheiro eram reordenadas por ordem crescente das somas.

Solução:

A solução apresentada inclui o ordenamento das linhas. Para isso usamos o método itemgetter do módulo operator. Começamos por percorrer o ficheiro linha a linha, calculando a soma dos números e guardando o resultado numa lista. É feito o ordenamento da lista de seguida. Na terceira parte, criamos o novo ficheiro e guardamos a informação.
01.from operator import itemgetter
02. 
03.def trata_ficheiro(ficheiro,novo_ficheiro):
04.    with open(ficheiro,'r') as f_in:
05.        novos_dados = list()
06.        for linha in f_in:
07.            lista_linha = linha[:-1].split()
08.            valor = sum([int(elem) for elem in lista_linha[1:]])
09.            lista_linha.append(valor)
10.            novos_dados.append(lista_linha)
11.     
12.    novos_dados.sort(key=itemgetter(-1))
13.    with open(novo_ficheiro,'w') as f_out:
14.        for linha in novos_dados:
15.            linha[-1] = str(linha[-1]) + '\n'
16.            cadeia = ' '.join(linha)
17.            f_out.write(cadeia)
18.             
19.    return novos_dados

Sem comentários:

Enviar um comentário