使用.decode()方法附加打印命令

时间:2014-11-11 21:00:57

标签: python regex python-3.x

我有一个大约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()

2 个答案:

答案 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()

我在正则表达式中做了什么:

  1. 抓住包含print(......)的文字,并将print(.....部分保存到第1组
  2. 使用print(....替换) .decode('utf-8'))之后的文本,使用保存的组号为1的语法\g<1>并将其作为前缀添加到替换文字。