Python 3 中 b' ' 中涵盖的变量

Python 3 中 b' ' 中涵盖的变量

我确信这是一个相当菜鸟的问题,我已经在 Google 上搜索过了,却找不到直接的答案,但我可能问错了……我正在尝试制作一个开箱即用的配置脚本,所有需要回答的问题都存储在一个名为 pass.ini 的文件中。当我从 getstr(使用 curses)获取用户输入时,当它填充我的文件时,它们都以 b'variable string' 作为其值。当我尝试执行 strip 命令时,我得到 b'riable strin'。当我执行 str(variable) 时,它会出现同样的问题。我看到 b'<variable_string>' 可以表示它是字节码而不是解码的。因此我尝试了解码命令,但失败了,因为“str 对象没有属性‘decode’我已将其通过 ConfigParser 写出,并将其作为 file.write 写入单独的文件。现在所有内容都被注释掉了,我没有主意了。

这是信息收集模块:

        wrapper(CommitChanges)
            curses.echo()
            stdscr.addstr(  8, 19,  config.CIP , curses.color_pair(3) )
            config.CIP = stdscr.getstr(  8, 19, 15)
            stdscr.addstr(  9, 19,  config.CSM , curses.color_pair(3) )
            config.CSM = stdscr.getstr( 9, 19, 15)
            stdscr.addstr( 10, 19,  config.CGW , curses.color_pair(3) )
            config.CGW = stdscr.getstr(10, 19, 15)
            stdscr.addstr( 11, 19,  config.CD1 , curses.color_pair(3) ) 
            config.CD1 = stdscr.getstr(11, 19, 15)
            stdscr.addstr( 12, 19,  config.CD2 , curses.color_pair(3) )
            config.CD2 = stdscr.getstr(12, 19, 15)
            stdscr.addstr( 13, 19,  config.CNTP, curses.color_pair(3) )
            config.CNTP = stdscr.getstr(13, 19, 15)
            stdscr.addstr( 16, 19,  config.CHN , curses.color_pair(3) )
            config.CHN = stdscr.getstr(16, 19, 15)
            stdscr.addstr( 14, 19,  config.CID , curses.color_pair(3) )
            config.CID = stdscr.getstr(14, 19, 15)
            stdscr.addstr( 15, 19,  config.CS , curses.color_pair(3) )
            config.CS = stdscr.getstr(15, 19, 15)


这是文件输出模块

def CommitChanges():
    MOP = "X"
    Config['Array=all']['PTLIP']        = a
    Config['Array=all']['PTLSM']        = config.CSM.decode('utf-8')
    Config['Array=all']['PTLGW']        = config.CGW.decode('utf-8')  
    Config['Array=all']['PTLD1']        = config.CD1.decode('utf-8')
    Config['Array=all']['PTLD2']        = config.CD2.decode('utf-8') 
    Config['Array=all']['PTLNTP']       = config.CNTP.decode('utf-8') 
    Config['Array=all']['PTLIF']        = config.CIFN.decode('utf-8') 
    Config['Array=all']['PTLHSTNM']     = config.CHN.decode('utf-8') 
    Config['Array=all']['PTLMOB']       = config.CMOB.decode('utf-8')
    Config['Array=all']['customerid']   = config.CID.decode('utf-8')
    Config['Array=all']['site']         = config.CS.decode('utf-8')
    with open('/opt/passp/pass.ini', 'w') as passini:
        Config.write(passini, space_around_delimiters=False)
    tpass= open('./pass.b', 'w')
    tpass.write("[Array=All]"+ "\n")
    tpass.write("ptlip="+ a + "\n")
    tpass.write("ptlsm="+ config.CSM.decode('utf-8') +"\n")
    tpass.write("ptlgw="+ config.CGW.decode('utf-8') + "\n")
    tpass.write("ptld1="+ config.CD1.decode('utf-8') + "\n")
        tpass.write("ptld2="+ config.CD2.decode('utf-8') + "\n")
    tpass.write("ptlntp="+ config.CNTPdecode('utf-8') + "\n")
    tpass.write("ptlif="+ config.CIFNdecode('utf-8') + "\n")
    tpass.write("ptldhstnm="+ config.CHNdecode('utf-8') + "\n")
    tpass.write("ptlmob="+ config.CMOBdecode('utf-8') + "\n")
    tpass.write("customerid="+ config.CIDdecode('utf-8') + "\n")
    tpass.write("site="+ config.CSdecode('utf-8') + "\n")
    #if Backupfiles():
    textchanges()
    return

以下是 ConfigParser 创建的文件保存输出

[Array=all]
ptlip=b'123'
ptlsm=b'321'
ptlgw=b'111'
ptld1=b'222'
ptld2=b'333'
ptlntp=b'444'
ptlif=s19
ptlhstnm=b'555'
ptlmob=
customerid=b'666'
site=b'777'

当我直接写入时,它们完全匹配(它们来自两次不同的运行,但即使是空数据,它也有包装器。

这里有趣的是,“ptlif”是通过查找接口名称收集的,它不由用户输入处理,因此它必须是 config.XXXX 变量的存储方式。


[Array=All]
ptlip=b''
ptlsm=b''
ptlgw=b''
ptld1=b''
ptld2=b''
ptlntp=b''
ptlif=s19
ptldhstnm=b''
ptlmob=
customerid=b''
site=b''

答案1

虽然这是一个编程问题,但 b'' 表示以字节为单位。与 Python 2 相比有很大变化。

str 对应于 Python 2 上的前 unicode 类型。它在内部表示为 Unicode 代码点序列。您可以声明 str 变量而不在字符串前面添加 u,因为它现在是默认的。

bytes 大致对应于 Python 2 上的前 str 类型(对于字节部分)。它是一种二进制序列化格式,由 8 位整数序列表示,适合在文件系统上存储数据或通过互联网发送数据。这就是为什么您只能创建包含 ASCII 文字字符的字节。要定义字节变量,只需将 ab 添加到字符串前面。

相关内容