如何摆脱字符串表示周围的单引号?

时间:2017-03-23 20:00:33

标签: python data-representation

此示例代码打印文件中一行的表示。它允许在一行中查看其内容,包括像#include <iostream> using namespace std; int main() { int Pass; cout << "Enter Pass Please"; cin >> Pass; switch (Pass) { case 1996: { cout << "O" << endl; } break; case 2015: { cout << "N\n"; } break; default: cout << "Z" << endl; break; } system("PAUSE"); } 这样的控制字符 - 所以我们将其称为&#34; raw&#34;线的输出。

'\n'

但是,输出显示为每个末尾添加了print("%r" % (self.f.readline())) 个字符,但不在文件中。

'

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

2 个答案:

答案 0 :(得分:5)

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

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

如果您正在打印这一切,那么您根本不需要将其传递给字符串格式化程序

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

这也有效:

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

答案 1 :(得分: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