Por que Python readlines () produz ' \ n ' extra; entre as linhas ao ler um arquivo de texto?


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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *