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.
from operator import itemgetter

def trata_ficheiro(ficheiro,novo_ficheiro):
    with open(ficheiro,'r') as f_in:
        novos_dados = list()
        for linha in f_in:
            lista_linha = linha[:-1].split()
            valor = sum([int(elem) for elem in lista_linha[1:]])
            lista_linha.append(valor)
            novos_dados.append(lista_linha)
    
    novos_dados.sort(key=itemgetter(-1))
    with open(novo_ficheiro,'w') as f_out:
        for linha in novos_dados:
            linha[-1] = str(linha[-1]) + '\n'
            cadeia = ' '.join(linha)
            f_out.write(cadeia)
            
    return novos_dados

Sem comentários:

Enviar um comentário