6

此示例代码打印文件中一行的表示。它允许'\n'在一行中查看其内容,包括控制字符,如 ,因此我们将其称为该行的“原始”输出。

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

但是,输出显示的'每个末端都添加了不在文件中的字符。

'line of content\n'

如何摆脱输出周围的单引号?
(行为在 Python 2.7 和 3.6 中是相同的。)

4

2 回答 2

8

%r接受repr字符串的表示。它可以根据需要转义换行符等,但还会添加引号。要解决此问题,请使用索引切片自己去除引号。

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

如果这就是您要打印的全部内容,则根本不需要将其传递给字符串格式化程序

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

这也有效:

print("%r" %(self.f.readline())[1:-1])
于 2017-03-23T20:17:42.027 回答
3

尽管这种方法有点矫枉过正,但在 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
于 2017-03-23T21:59:10.113 回答