Как избавиться от одинарных кавычек вокруг представления строки?

Этот пример кода печатает представление строки из файла. Это позволяет просматривать его содержимое, включая управляющие символы, такие как '\n'на одной строке - поэтому мы называем это "необработанным" выводом строки.

print("%r" % (self.f.readline()))

Вывод, однако, появляется с ' символы, добавленные к каждому концу, которых нет в файле.

'line of content\n'

Как избавиться от одинарных кавычек вокруг выхода?
(Поведение одинаково в Python 2.7 и 3.6.)

2 ответа

Решение

%r принимает repr представление строки. Он экранирует строки и т. Д., Как вы хотите, но также добавляет кавычки. Чтобы исправить это, удалите кавычки самостоятельно с нарезкой индекса.

print("%s" %(repr(self.f.readline())[1:-1]))

Если это все, что вы печатаете, вам вообще не нужно передавать его через формататор строк

print(repr(self.f.readline())[1:-1])

Это также работает:

print("%r" %(self.f.readline())[1:-1])

Хотя этот подход был бы излишним, в Python вы можете создать подкласс большинства, если не всех, встроенных типов, включая str, Это означает, что вы можете определить свой собственный строковый класс, представление которого соответствует вашему желанию.

Следующее иллюстрирует использование этой способности:

class MyStr(str):
    """ Special string subclass to override the default representation method
        which puts single quotes around the result.
    """
    def __repr__(self):
        return super(MyStr, self).__repr__().strip("'")

s1 = 'hello\nworld'
s2 = MyStr('hello\nworld')

print("s1: %r" % s1)
print("s2: %r" % s2)

Выход:

s1: 'hello\nworld'
s2: hello\nworld
Другие вопросы по тегам