ti-enxame.com

Excluindo retornos de carro causados ​​pela leitura de linha

Eu tenho uma lista:

Cat
Dog
Monkey
Pig

Eu tenho um script:

import sys
input_file = open('list.txt', 'r')
for line in input_file:
    sys.stdout.write('"' + line + '",')

A saída é:

"Cat
","Dog
","Monkey
","Pig",

Eu gostaria:

"Cat","Dog","Monkey","Pig",

Não consigo me livrar do retorno de carro que ocorre com o processamento das linhas da lista. Ponto de bônus para se livrar do, no final. Não sabe como encontrar e excluir a última instância.

17
Chris J. Vargo

str.rstrip ou simplesmente str.strip é a ferramenta certa para dividir o retorno de carro (nova linha) dos dados lidos no arquivo. Observe que str.strip separará os espaços em branco de cada extremidade. Se você estiver interessado apenas em remover a nova linha, use strip('\n')

Mude a linha

 sys.stdout.write('"' + line + '",')

para

sys.stdout.write('"' + line.strip() + '",')

Observe no seu caso, uma solução mais simplista teria sido

>>> from itertools import imap
>>> with open("list.txt") as fin:
    print ','.join(imap(str.strip, fin))


Cat,Dog,Monkey,Pig

ou Apenas usando List COmprehension

>>> with open("test.txt") as fin:
    print ','.join(e.strip('\n') for e in  fin)


Cat,Dog,Monkey,Pig
21
Abhijit

Você pode usar .rstrip() para remover novas linhas do lado direito de uma string:

line.rstrip('\n')

ou você pode pedir para remover todos os espaços em branco (incluindo espaços, tabulações e retornos de carro):

line.rstrip()

É uma versão mais específica do método .strip() que remove espaços em branco ou caracteres específicos dos lados dos dois lados da corda.

Para o seu caso específico , você pode usar um simples .strip(), mas para o caso geral em que deseja remover apenas a nova linha, eu usaria `.rstrip ('\ n').

Eu usaria um método diferente para escrever suas seqüências de caracteres:

with open('list.txt') as input_file:
    print ','.join(['"{}"'.format(line.rstrip('\n')) for line in input_file])

Ao usar ','.join(), você evita a última vírgula e o método str.format() é mais fácil para os olhos do que muita concatenação de strings (para não mencionar mais rapidamente) .

8
Martijn Pieters

Antes de tudo, para fazer com que tudo apareça em uma linha, você deve obter a casca do '\n'. Acho que line.rstrip('\n') funciona bem.

Para me livrar do ',' no final, eu colocaria todas as palavras em uma lista adicionando aspas. Em seguida, usando join (), junte todas as palavras da lista com ","

temp = []
for line in file:
    i = line.rstrip('\n')
    Word = '"'+i+'"'
    temp.append(Word)
print ",".join(temp)

Isso deve obter a saída desejada

1
Jroosterman