Удаление возвратов каретки, вызванных чтением строки
У меня есть список:
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)
Это должно получить желаемый результат