Em Python, chamando
temp = open(filename,'r').readlines()
resulta em uma lista na qual cada elemento é uma linha no arquivo. É um pouco estúpido, mas ainda assim: readlines()
também escreve caracteres de nova linha para cada elemento, algo que eu não desejo que aconteça.
Como posso evitá-lo?
python
line-breaks
readlines
Yotam
fonte
fonte
[l.strip('\n\r') for l in temp]
. Ou atérstrip
. E já que a iteração aqui pode ser emin open
vez dein temp
.newline
argumento do open para as novas linhas finais.Respostas:
Você pode ler o arquivo inteiro e dividir linhas usando
str.splitlines
:Ou você pode retirar a nova linha manualmente:
Nota: esta última solução funciona apenas se o arquivo terminar com uma nova linha, caso contrário, a última linha perderá um caractere.
Esta suposição é verdade na maioria dos casos (especialmente para arquivos criados por editores de texto, que muitas vezes fazer adicionar uma nova linha terminando de qualquer maneira).
Se você deseja evitar isso, pode adicionar uma nova linha no final do arquivo:
Ou uma alternativa mais simples é
strip
a nova linha:Ou ainda, embora bastante ilegível:
O que explora o fato de que o valor de retorno de
or
não é um booleano, mas o objeto que foi avaliado como verdadeiro ou falso.O
readlines
método é realmente equivalente a:Desde
readline()
mantém a nova linha tambémreadlines()
mantém.Nota: a simetria
readlines()
nowritelines()
método não adiciona novas linhas finais,f2.writelines(f.readlines())
produz uma cópia exata def
inf2
.fonte
[line.rstrip('\n') for line in file]
removerá mais de um final\n
.[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
poderia ser[line[:-(line[-1] == '\n') or None] for line in file]
.for line in (x.strip() for x in f):
with
fecha os arquivos quando o bloco termina, o que significa que você não pode fazerwith open(...) as f: lines = (line for line in f)
e usarlines
fora do servidorwith
porque receberá um erro de E / S. Você pode ficar preguiçoso usando um genexp, mas deve consumi-lo antes de fechar o arquivo.fonte
\r\n
novas linhas? ;).split('\n')
será dividido corretamente, independentemente da convenção da nova linha. É importante que você leia o arquivo no modo binário, nesse casosplitlines()
lida com novas linhas universais esplit('\n')
não.os.linesep
:)\r\n
terminações da linha do sistema não são convertidas para\n
, sejam lidas como texto ou binárias, portantoos.linesep
funcionariam onde\n
não. Massplitlines
é claramente a melhor escolha, no caso de você mencionar onde o arquivo não corresponde ao sistema operacional. Na verdade, eu o mencionei principalmente no caso de as pessoas que olham para esta discussão desconhecem sua existência.\r\n
seriam convertidas para arquivos de texto, mesmo quando você estiver executando no Linux.outro exemplo:
Lendo o arquivo uma linha por vez. Removendo caracteres indesejados do final da string
str.rstrip(chars)
veja também
str.strip([chars])
estr.lstrip([chars])
(python> = 2.0)
fonte
fonte
Eu acho que essa é a melhor opção.
fonte
temp = [line.rstrip() for line in file.readlines()]
para obter o que as notas do @Roland_Illig se destinam..readlines()
, você efetivamente itera o arquivo inteiro duas vezes.Tente o seguinte:
fonte
fonte
.readlines()
dessa maneira, você efetivamente itera o arquivo inteiro duas vezes.fonte
fonte