2015-04-23 49 views
0

我想從我的電子郵件內容中使用rstrip方法刪除一些不必要的字符。我試圖調試使用print(r)的計劃,但我得到這個錯誤:「TypeError:Type str不支持緩衝區API」使用str.rstrip()

File "/home/******/Desktop/loung/imap.py", line 23, in signin 
r = raw_email.rstrip('\r\n') 
TypeError: Type str doesn 't support the buffer API 

這是什麼意思?
我的代碼如下:

from tkinter import ttk 
from tkinter import * 
import tkinter, imaplib,email 
def signin(w,x,s): 
     tkgui = tkinter.Tk() 
     tkgui.title('Inbox %s'%w) 
     mail=imaplib.IMAP4_SSL(('%s'%s),993) 
     mail.login(('%s'%w), ('%s'%x)) 
     mail.list() 
     mail.select("INBOX") 
     result, data = mail.search(None, "ALL") 
     ids = data[0] 
     id_list = ids.split() 
     tree = ttk.Treeview(tkgui) 
     for i in range(-1,0):  
       result, data = mail.fetch(id_list[i], '(RFC822)') 
       raw_email = data[0][1] 
       d = email.message_from_bytes(raw_email) 
       tree.insert('',0,value=(d['Date'],d['From'],d['Subject'])) 
     tree['columns']=['Date','From','Subject'] 
     r=raw_email.rstrip('\r\n') 
     print(r) 
     for col in tree['columns']: 
      tree.heading(col,text=col) 
     tree.pack(side=TOP,fill=BOTH,expand=1) 
     tkgui.mainloop() 
+0

執行一次for循環的for循環的要點是什麼? –

回答

1

在這種情況下,這意味着你需要使用字節而不是STR,特別添加一個「B」前綴'\r\n'得到b'\r\n'raw_email是字節,你只能從中刪除字節。另一方面,d是一個str實例。這就是爲什麼使用字符串的原因。

我相信這個晦澀的錯誤信息最近被更改爲希望更容易理解。

+0

我只是試過我沒有工作,雖然 – Brahim

+0

感謝信息意味着我所說的(在3.x),你應該給我信用回答你的問題。如果您傳遞一個字節對象並獲取不同的錯誤消息,那麼這是一個不同的問題和潛在的問題。 –

+0

它爲我工作。我有包含二進制數據的原始行格式gz文件。現在它正在使用'str.rstrip(b'\ n');' –

相關問題