Melhor resposta
Porque é estúpido. Não consigo pensar em uma aplicação útil para este recurso e tentei muito.
(Veja a resposta de Romain para uma abordagem séria sobre “por que exatamente”, eu só preciso questionar 🙂 posso fornecer algumas soluções alternativas, no entanto)
Por que não aceita mais um parâmetro (ou seja, “finalizando”, que é o padrão para “\ n”, ou um sinalizador bool, keepnl = True), para que eu possa escolher manter / alterar o final da linha, se, e somente se eu precisar, for além da minha compreensão.
Isso “decisão política” não intuitiva torna-o praticamente inutilizável e, em vez de lento e difícil de compreender:
lines = [ ln[:-1] for ln in f.readlines() ]
Normalmente prefiro
lines = f.read().split("\n")
Muito mais direto aos meus olhos. Acho que é tarde demais para mudar agora.
Sim, existe a possibilidade de outras terminações de linha, dependendo do sistema operacional.
Acho que até mesmo as bibliotecas padrão do python têm suas falhas , também.
Resposta
Esses caracteres não extras. Eles estão presentes no arquivo de texto. Eles marcam o fim das linhas.
Esta é outra maneira de ler um arquivo de texto, chamada sample.txt
, que ilustra.
>>> with open("sample.txt") as sample:
... contents = sample.readlines()
... print(contents)
...
["This is line number 1\n", "This is line number 2\n", "This is line number 3\n", "This is line number 4\n", "This is line number 5\n", "This is line number 6\n", "This is line number 7\n", "This is line number 8\n", "This is line number 9\n", "This is line number 10\n", "This is line number 11\n", "This is line number 12\n", "This is line number 13\n", "This is line number 14\n", "This is line number 15\n", "This is line number 16\n", "This is line number 17\n", "This is line number 18\n", "This is line number 19\n", "This is line number 20\n"]
- Cada linha no impresso a saída termina com
\n
porque essas estavam nas linhas do arquivo de texto. - Seria melhor usar
with
quando você abre um arquivo porque esta construção organiza para fechar os arquivos após o uso. - Percebi que você chamou seu arquivo de
file
. Você deve evitar usar nomes que façam parte da linguagem Python.
Se quiser um código que retire as novas linhas, aqui está uma opção:
>>> with open("sample.txt") as sample:
... for line in sample:
... print(line.rstrip())
...
This is line number 1
This is line number 2
This is line number 3
This is line number 4
This is line number 5
This is line number 6
This is line number 7
This is line number 8
This is line number 9
This is line number 10
This is line number 11
This is line number 12
This is line number 13
This is line number 14
This is line number 15
This is line number 16
This is line number 17
This is line number 18
This is line number 19
This is line number 20
Nota t hat Eu usei rstrip
que remove os caracteres de espaço em branco apenas da extremidade direita de uma string.