这个示例代码打印了来自文件的行的表示方式。它允许查看其内容,包括控制字符,例如'\n'
,在单行上显示 - 因此我们称其为行的“原始”输出。
print("%r" % (self.f.readline()))
然而,输出结果中出现了每个端点都带有单引号'
字符,而文件中并没有这些字符。
'line of content\n'
如何消除输出结果周围的单引号?
(在Python 2.7和3.6中行为相同。)
这个示例代码打印了来自文件的行的表示方式。它允许查看其内容,包括控制字符,例如'\n'
,在单行上显示 - 因此我们称其为行的“原始”输出。
print("%r" % (self.f.readline()))
然而,输出结果中出现了每个端点都带有单引号'
字符,而文件中并没有这些字符。
'line of content\n'
如何消除输出结果周围的单引号?
(在Python 2.7和3.6中行为相同。)
%r
接受字符串的repr
表示。它会按您需要转义换行符等内容,但同时也添加引号。如果想要去掉引号,可以使用索引切片来完成。
print("%s" %(repr(self.f.readline())[1:-1]))
print(repr(self.f.readline())[1:-1])
print("%r" %(self.f.readline())[1:-1])
print(("%r" %(self.f.readline()))[1:-1])
。 - ForceBru"%s"
,你可以直接打印切片后的 repr
结果。 - user2357112print("%r" %(self.f.readline())[1:-1])
。如上所述,如果格式仅为 "%r"
,则无需通过格式化程序进行传递。第二个选项已经是更好的选择了。 - tdelaneyprint(("%r" %(f.readline()))[1:-1])
。 - tdelaneyrepr()
是否比使用格式化程序更有效?使用%r
是否会有明显的开销,还是所有这些都是“我喜欢这个”,“我不喜欢那个”...我猜是这样,但除了“喜欢”和“不喜欢”之外,这个帖子上没有人用逻辑来证明他们的理由。尽管如此,提出了很好的建议,我的编码解决方案正在使用索引而不是我最初发布的答案,当更好的答案出现在这里时,我删除了它。 - TMWPstr
。这意味着您可以定义自己的字符串表示形式。以下示例说明了如何使用该功能: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
MyStr
中覆盖__repr__
方法,使用def __repr__(self): return self.__str__()
即可。 - fhgdhello
和 world
被分别打印在不同的行上。 - martineau
str.strip("'")
或[1:-1]
切片。 - Jean-François Fabrerepr
。 - user2357112