Удаление возвратов каретки, вызванных чтением строки

У меня есть список:

Cat
Dog
Monkey
Pig

У меня есть script:

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

Вывод:

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

Мне бы хотелось:

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

Я не могу избавиться от возврата каретки, которое возникает при обработке строк в списке. Бонусная точка для избавления от, в конце. Не знаете, как просто найти и удалить последний экземпляр.

Ответ 1

str.rstrip или просто str.strip правильный инструмент для разделения возврата каретки (новой строки) из данных, считанных из файла. Примечание str.strip будет разделять пробелы с любого конца. Если вас интересует только удаление новой строки, просто используйте strip('\n')

Измените строку

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

к

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

Обратите внимание, что в вашем случае более упрощенным решением было бы

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


Cat,Dog,Monkey,Pig

или просто используя "Список походов"

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


Cat,Dog,Monkey,Pig

Ответ 2

Вы можете использовать .rstrip() для удаления строк новой строки из правой части строки:

line.rstrip('\n')

или вы можете сказать ему удалить все пробелы (включая пробелы, вкладки и возврат каретки):

line.rstrip()

Это более конкретная версия метода .strip(), который удаляет пробелы или конкретные символы с обеих сторон строки.

В вашем конкретном случае вы можете придерживаться простого .strip(), но для общего случая, когда вы хотите удалить только новую строку, я бы придерживался `.rstrip('\n').

Я бы использовал другой метод для записи ваших строк:

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

Используя ','.join(), вы избегаете последней запятой, а использование метода str.format() проще для глаз, чем много строк конкатенация (не говоря уже об ускорении).

Ответ 3

Прежде всего, чтобы все это отображалось на одной строке, вы должны получить кожуру '\n'. Я считаю, что line.rstrip('\n') работает хорошо.

Чтобы избавиться от "," в конце, я бы поместил все слова в список, добавляя кавычки. Затем, используя join(), соедините все слова в списке с помощью ","

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

Это должно получить желаемый результат