我有一个大约300行的脚本(其中一部分粘贴在下面)有很多打印命令。我正在尝试清理它产生的输出。如果我按照它的方式离开它,那么所有打印命令都会打印带有\ r \ n的字节到控制台。
我想如果我在需要打印的变量前加上.decode(' utf-8')那么输出就是我应该期待的(单代码字符串)。例如,比较下面的print(data1)和print(data3)命令。我想要做的是遍历所有代码并将.decode()附加到每个print语句。
所有打印命令都采用以下格式:打印(dataxxxx)
import telnetlib
import time
import sys
import random
from xlwt import Workbook
shelfIp = "10.10.10.10"
shelf = "33"
print ("Shelf IP is: " + str(shelfIp))
print ("Shelf number is: " + str(shelf))
def addCard():
tn = telnetlib.Telnet(shelfIp)
### Telnet session
tn.read_until(b"<",5)
cmd = "ACT-USER::ADMIN:ONE::ADMIN;"
tn.write(bytes(cmd,encoding="UTF-8"))
data1 = tn.read_until(b"ONE COMPLD", 5)
print (data1.decode('utf-8'))
### Entering second network element
cmd = "ENT-CARD::CARD" + shelf + "-" + shelf + ":TWO:xyz:;"
tn.write(bytes(cmd,encoding="UTF-8"))
data3 = tn.read_until(b"TWO COMPLD", 5)
print (data3)
### Entering third network element
cmd = "ENT-CARD::CARD-%s-%s:ADM:ABC:;" %(shelf,shelf)
tn.write(bytes(cmd,encoding="UTF-8"))
dataAmp = tn.read_until(b"ADM COMPLD", 5)
print (dataAmp)
tn.close()
addCard()
答案 0 :(得分:0)
将.decode()
添加到print()
语句将失败,因为.decode()
是string
方法。
>>> x=u"testing"
>>> print(x).decode('utf-8')
testing
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'decode'
您必须将.decode('utf-8')
应用于您要解码的变量,而使用基于正则表达式的工具无法轻松完成。
答案 1 :(得分:0)
如果您正在考虑对代码进行某种查找替换,可以试试这个:
import re
f = open('script.py','rb')
script = f.read()
f.close()
newscript = re.sub("(print\(.*)\)", "\g<1>.decode('utf-8'))", script)
f = open('script.py', 'wb')
f.write(newscript)
f.close()
我在正则表达式中做了什么:
print(......)
的文字,并将print(.....
部分保存到第1组print(....
替换)
.decode('utf-8'))
之后的文本,使用保存的组号为1的语法\g<1>
并将其作为前缀添加到替换文字。