web-dev-qa-db-ja.com

'str'オブジェクトには 'decode'属性はありません。Python 3のエラー?

これが私のコードです:

import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('[email protected]', 'password')
conn.select()
conn.search(None, 'ALL')
data = conn.fetch('1', '(BODY[HEADER])')
header_data = data[1][0][1].decode('utf-8')

この時点で私はエラーメッセージが表示されます

AttributeError: 'str' object has no attribute 'decode'

Python 3にはもうデコードがありません。どうすればこれを修正できますか?

また、で:

data = conn.fetch('1', '(BODY[HEADER])')

最初のメールのみを選択しています。すべて選択する方法

114
user4530588

すでにデコードされているオブジェクトをデコードしようとしています 。あなたはstrを持っています、もうUTF-8からデコードする必要はありません。

.decode('utf-8')の部分を削除するだけです。

header_data = data[1][0][1]

fetch()呼び出しに関しては、最初のメッセージだけを明示的に要求しています。さらにメッセージを取得したい場合は範囲​​を使用してください。 ドキュメント :を参照してください。

以下のコマンドに対する message_set オプションは、処理される1つ以上のメッセージを指定する文字列です。単純なメッセージ番号('1')、ある範囲のメッセージ番号('2:4')、またはコンマで区切られた不連続な範囲のグループ('1:3,6:9')のいずれかです。範囲には、無限の上限('3:*')を示すためにアスタリスクを含めることができます。

120
Martijn Pieters

Python 3以降、すべての文字列はUnicodeオブジェクトです。

  a = 'Happy New Year' # Python 3
  b = unicode('Happy New Year') # Python 2

前のコードは同じです。だから私はあなたが.decode('utf-8')を削除するべきだと思います。あなたはすでにUnicodeオブジェクトを取得しているからです。

26
Neo Ko

この方法で使用してください。

str.encode().decode()
19
Alireza

私はライブラリに慣れていませんが、あなたがあなたの問題があなたがバイト配列を望んでいないということであるならば、1つの簡単な方法は直接キャストでエンコーディングタイプを指定することです:

>>> my_byte_str
b'Hello World'

>>> str(my_byte_str, 'utf-8')
'Hello World'
6
Broper

Python 3では既にデコードされています。直接試してください。

2
Aditya

Python3の場合

html = """\\u003Cdiv id=\\u0022contenedor\\u0022\\u003E \\u003Ch2 class=\\u0022text-left m-b-2\\u0022\\u003EInformaci\\u00f3n del veh\\u00edculo de patente AA345AA\\u003C\\/h2\\u003E\\n\\n\\n\\n \\u003Cdiv class=\\u0022panel panel-default panel-disabled m-b-2\\u0022\\u003E\\n \\u003Cdiv class=\\u0022panel-body\\u0022\\u003E\\n \\u003Ch2 class=\\u0022table_title m-b-2\\u0022\\u003EInformaci\\u00f3n del Registro Automotor\\u003C\\/h2\\u003E\\n \\u003Cdiv class=\\u0022col-md-6\\u0022\\u003E\\n \\u003Clabel class=\\u0022control-label\\u0022\\u003ERegistro Seccional\\u003C\\/label\\u003E\\n \\u003Cp\\u003ESAN MIGUEL N\\u00b0 1\\u003C\\/p\\u003E\\n \\u003Clabel class=\\u0022control-label\\u0022\\u003EDirecci\\u00f3n\\u003C\\/label\\u003E\\n \\u003Cp\\u003EMAESTRO ANGEL D\\u0027ELIA 766\\u003C\\/p\\u003E\\n \\u003Clabel class=\\u0022control-label\\u0022\\u003EPiso\\u003C\\/label\\u003E\\n \\u003Cp\\u003EPB\\u003C\\/p\\u003E\\n \\u003Clabel class=\\u0022control-label\\u0022\\u003EDepartamento\\u003C\\/label\\u003E\\n \\u003Cp\\u003E-\\u003C\\/p\\u003E\\n \\u003Clabel class=\\u0022control-label\\u0022\\u003EC\\u00f3digo postal\\u003C\\/label\\u003E\\n \\u003Cp\\u003E1663\\u003C\\/p\\u003E\\n \\u003C\\/div\\u003E\\n \\u003Cdiv class=\\u0022col-md-6\\u0022\\u003E\\n \\u003Clabel class=\\u0022control-label\\u0022\\u003ELocalidad\\u003C\\/label\\u003E\\n \\u003Cp\\u003ESAN MIGUEL\\u003C\\/p\\u003E\\n \\u003Clabel class=\\u0022control-label\\u0022\\u003EProvincia\\u003C\\/label\\u003E\\n \\u003Cp\\u003EBUENOS AIRES\\u003C\\/p\\u003E\\n \\u003Clabel class=\\u0022control-label\\u0022\\u003ETel\\u00e9fono\\u003C\\/label\\u003E\\n \\u003Cp\\u003E(11)46646647\\u003C\\/p\\u003E\\n \\u003Clabel class=\\u0022control-label\\u0022\\u003EHorario\\u003C\\/label\\u003E\\n \\u003Cp\\u003E08:30 a 12:30\\u003C\\/p\\u003E\\n \\u003C\\/div\\u003E\\n \\u003C\\/div\\u003E\\n\\u003C\\/div\\u003E \\n\\n\\u003Cp class=\\u0022text-center m-t-3 m-b-1 hidden-print\\u0022\\u003E\\n \\u003Ca href=\\u0022javascript:window.print();\\u0022 class=\\u0022btn btn-default\\u0022\\u003EImprim\\u00ed la consulta\\u003C\\/a\\u003E \\u0026nbsp; \\u0026nbsp;\\n \\u003Ca href=\\u0022\\u0022 class=\\u0022btn use-ajax btn-primary\\u0022\\u003EHacer otra consulta\\u003C\\/a\\u003E\\n\\u003C\\/p\\u003E\\n\\u003C\\/div\\u003E"""
print(html.replace("\\/", "/").encode().decode('unicode_escape'))
2
krishna chandak