Python 3 中 b’ ’ 中涵蓋的變數
我確信這是一個相當菜鳥的問題,我用Google搜尋過,找不到直接的答案,但我可能問錯了……我正在嘗試製作一個開箱即用的配置腳本,以及所有需要的問題回答儲存在一個名為 pass.ini 的文件中。當我在填充我的文件時從getstr(使用curses)獲取使用者輸入時,它們都有b’variable string’作為它們的值。當我嘗試執行剝離命令時,我得到 b’riable strin’。當我做一個 str(variable) 時,它會遇到同樣的問題。我看到 b’<variable_string>’ 可以表示它是字節碼而不是解碼的標誌。所以我嘗試了一個解碼命令,但失敗了,因為’str object has no attribute’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''
雖然這是一個程式問題,但 b’’ 表示它以字節為單位。與 python 2 相比有很大的變化。
str 對應於 Python 2 上的前 unicode 類型。它在內部表示為 Unicode 程式碼點序列。您可以聲明一個 str 變數,而無需在字元串前面加上 u,因為它現在是預設值。
bytes 大致對應於 Python 2 上的前 str 類型(用於 bytes 部分)。它是一種二進制序列化格式,由 8 位整數序列表示,適合在文件系統上儲存數據或通過 Internet 發送數據。這就是為什麼您只能創建包含 ASCII 文字字元的字節。要定義字節變數,只需將 ab 添加到字元串。