将其中包含 \n 的文本替换为真正的 \n 输出
Replacing a text with \n in it, with a real \n output
我正在尝试从 juniper 路由器获取配置,但遇到以下问题:
设置后
stdin, stdout, stderr = client1.exec_command('show configuration interfaces %s' % SID)
CONFIG = stdout.read()
print CONFIG
它给我带来了这样的东西
'description El_otro_Puerto_de_la_Routing-instance;\nvlan-id 309;\nfamily inet {\n mtu 1600;\n address 10.100.10.10/24;\n}\n'
问题是我想以这种格式接收该信息:
'description El_otro_Puerto_de_la_Routing-instance;
nvlan-id 309;
nfamily inet {
mtu 1600;
address 10.100.10.10/24;
}
所以我希望 \n 实际上是一个新行,而不仅仅是向我显示“\n”字符串。
如果您在 Python 解释器中 运行 this,解释器的常规行为是将换行符显示为“\n”而不是实际的换行符,因为这样更容易调试输出。如果你想在解释器中获得实际的换行符,你应该 print
你得到的字符串。
如果这是程序输出的内容(即:您从外部程序获取换行转义序列),您应该使用以下内容:
OUTPUT = stdout.read()
formatted_output = OUTPUT.replace('\n', '\n').replace('\t', '\t')
print formatted_output
这将用输出字符串中的实际换行符替换转义换行符。
您想要的另一种方法是将字符串拆分为字符串列表(每行)。
mystr = 'a\nb\nc'
mystr = mystr.split(sep='\n')
print(mystr)
#this will be your print output:['a', 'b', 'c']
for s in mystr:
print(s)
#your print output:
#a
#b
#c
这也有效:
CONFIG = """{}""".format(CONFIG)
在python3+中,解释所有转义字符的最佳方式是:
print(f"{yourStringHere}")
这使用 f-strings,在我看来,这可能是解决此问题的最优雅的方法。
正则表达式可以帮助定位 \x
序列。 substitution-pairs 仍然需要手动指定,就像在@PedroCastilho 的 .
中一样
import re
CONFIG = stdout.read()
print(re.sub(r'\.',lambda x:{'\n':'\n','\t':'\t'}.get(x[0],x[0]),CONFIG))
这将用实际的换行符和制表符替换 \n
-s 和 \t
-s,并保持未知的不变。
喜欢
print(re.sub(r'\.',lambda x:{'\n':'\n','\t':'\t'}.get(x[0],x[0]),
'foo\nbar\nbaz\tbrr\n\q'))
打印
foo
bar
baz brr
\q
所以换行符和制表符就位了,\q
简单地保留了下来。
我正在尝试从 juniper 路由器获取配置,但遇到以下问题:
设置后
stdin, stdout, stderr = client1.exec_command('show configuration interfaces %s' % SID)
CONFIG = stdout.read()
print CONFIG
它给我带来了这样的东西
'description El_otro_Puerto_de_la_Routing-instance;\nvlan-id 309;\nfamily inet {\n mtu 1600;\n address 10.100.10.10/24;\n}\n'
问题是我想以这种格式接收该信息:
'description El_otro_Puerto_de_la_Routing-instance;
nvlan-id 309;
nfamily inet {
mtu 1600;
address 10.100.10.10/24;
}
所以我希望 \n 实际上是一个新行,而不仅仅是向我显示“\n”字符串。
如果您在 Python 解释器中 运行 this,解释器的常规行为是将换行符显示为“\n”而不是实际的换行符,因为这样更容易调试输出。如果你想在解释器中获得实际的换行符,你应该 print
你得到的字符串。
如果这是程序输出的内容(即:您从外部程序获取换行转义序列),您应该使用以下内容:
OUTPUT = stdout.read()
formatted_output = OUTPUT.replace('\n', '\n').replace('\t', '\t')
print formatted_output
这将用输出字符串中的实际换行符替换转义换行符。
您想要的另一种方法是将字符串拆分为字符串列表(每行)。
mystr = 'a\nb\nc'
mystr = mystr.split(sep='\n')
print(mystr)
#this will be your print output:['a', 'b', 'c']
for s in mystr:
print(s)
#your print output:
#a
#b
#c
这也有效:
CONFIG = """{}""".format(CONFIG)
在python3+中,解释所有转义字符的最佳方式是:
print(f"{yourStringHere}")
这使用 f-strings,在我看来,这可能是解决此问题的最优雅的方法。
正则表达式可以帮助定位 \x
序列。 substitution-pairs 仍然需要手动指定,就像在@PedroCastilho 的
import re
CONFIG = stdout.read()
print(re.sub(r'\.',lambda x:{'\n':'\n','\t':'\t'}.get(x[0],x[0]),CONFIG))
这将用实际的换行符和制表符替换 \n
-s 和 \t
-s,并保持未知的不变。
喜欢
print(re.sub(r'\.',lambda x:{'\n':'\n','\t':'\t'}.get(x[0],x[0]),
'foo\nbar\nbaz\tbrr\n\q'))
打印
foo bar baz brr \q
所以换行符和制表符就位了,\q
简单地保留了下来。