Je dois obtenir un décompte des e-mails reçus quotidiennement dans une boîte aux lettres Gmail et enregistrer ce décompte dans un tableau. Pour ce faire, j'utilise l'imaplib:

import imaplib  
import re
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)  
obj.login('xxx@gmail.com', 'password')  
obj.select('Inbox')     
('OK', ['50'])  
gmail_count = obj.search(None,'(SINCE "01-Sep-2020" BEFORE "02-Sep-2020")') 
print(gmail_count)

Et j'obtiens quelque chose comme ceci: ('OK', [b'28410 28411 28412 28413 28414 28415 28416 28417 28418 28419 28420 28421 28422 28423 28424 28425 28426 28427 28428 28429 28430 28431 28432 28433 28434 28435 '28431 28432 28433 28434 28435 28439 28439)

Je dois maintenant compter le nombre de valeurs dans ce tuple pour obtenir le nombre d'e-mails, je voudrais donc remplacer les espaces par des virgules. Comment puis-je faire ceci?

0
A Caradonna 2 sept. 2020 à 14:18

2 réponses

Meilleure réponse

Vous pouvez utiliser la fonction intégrée replace pour remplacer les espaces par des virgules dans une chaîne

Dans votre cas, vous devez d'abord convertir votre tableau d'octets en une chaîne avec la fonction decode("utf-8").

Si vos données ne sont pas encodées en utf-8, vous pouvez modifier le paramètre dans la fonction decode avec la méthode d'encodage correcte.

values = gmail_count[1][0]
replaced = values.decode("utf-8").replace(" ", ",")
0
Xeyes 2 sept. 2020 à 11:28

Vous pouvez également simplement utiliser split pour obtenir une liste, puis vous pouvez obtenir le nombre et effectuer toute autre opération de liste dessus:

uidbytes = b’10 20 30’
uidlist = uidbytes.split(b’ ‘)
print(uidlist)
print(len(uidlist))

Production:

[b’10’, b’20, b’30’]
3

Vous pouvez même les changer en nombres entiers:

>>> [int(x) for x in uidlist]
[10, 20, 30]
0
Max 4 sept. 2020 à 15:41