1326
Comentário:
|
1338
|
Deleções são marcadas assim. | Adições são marcadas assim. |
Linha 15: | Linha 15: |
#extrai as linhas do arquivo em uma lista | # extrai as linhas do arquivo em uma lista |
Linha 17: | Linha 17: |
linhas_arquivo = [linha for linha in arquivo] | linhas_arquivo = [ linha for linha in arquivo ] |
Linha 20: | Linha 20: |
#cria uma lista com o comprimento de cada linha compr_linhas = [len(linha) for linha in linhas_arquivo] |
# cria uma lista com o comprimento de cada linha compr_linhas = [ len(linha) for linha in linhas_arquivo ] |
Linha 23: | Linha 23: |
#acha o maior numero dentro da lista de comprimentos, #ou seja, qual é o comprimento da maior linha |
# acha o maior numero dentro da lista de comprimentos, # ou seja, qual é o comprimento da maior linha |
Linha 27: | Linha 27: |
#retorna todas as linhas que tenham o comprimento da maior linha maior_linha = [linha for linha in linhas_arquivo if len(linha)==compr_maior_linha] |
# retorna todas as linhas que tenham o comprimento da maior linha maior_linha = [ linha for linha in linhas_arquivo if len(linha)==compr_maior_linha ] |
Linha 32: | Linha 32: |
print "\n".join(achaMaiorLinhaEmArquivo("meu_aquivo.txt")) | print "\n".join(achaMaiorLinhaEmArquivo("meu_arquivo.txt")) |
Receita: Acha maior linha em arquivo
Eu precisava de uma função que retornasse, dentro de um arquivo .txt, a maior linha (linha de maior comprimento). Talvez seja útil para mais alguém. Esse código também pode ser facilmente adaptado para retornar qual a maior string dentro de uma lista (só tirar a parte relativa à abertura de arquivo).
Sou capaz de jurar que as linhas 2-16 podem ser reduzidas a 1 linha, só não sei como ainda
Código
1 def achaMaiorLinhaEmArquivo(nome_arquivo):
2 # extrai as linhas do arquivo em uma lista
3 arquivo = file(nome_arquivo)
4 linhas_arquivo = [ linha for linha in arquivo ]
5 arquivo.close()
6
7 # cria uma lista com o comprimento de cada linha
8 compr_linhas = [ len(linha) for linha in linhas_arquivo ]
9
10 # acha o maior numero dentro da lista de comprimentos,
11 # ou seja, qual é o comprimento da maior linha
12 compr_maior_linha = reduce(lambda x,y: max(x,y), compr_linhas)
13
14 # retorna todas as linhas que tenham o comprimento da maior linha
15 maior_linha = [ linha for linha in linhas_arquivo if len(linha)==compr_maior_linha ]
16 return maior_linha
17
18 if __name__ == "__main__":
19 print "\n".join(achaMaiorLinhaEmArquivo("meu_arquivo.txt"))
Volta para CookBook.