Maison > Article > développement back-end > Problème lors de l'utilisation d'icalendar pour analyser les données vDDDTypes en python
Comme vous pouvez probablement le déduire de ce qui suit, je ne suis pas un programmeur très compétent. Néanmoins, j'essaie d'écrire un programme python pour importer des données à partir d'un fichier au format icalendar et les stocker dans une base de données. Le fichier apparaît plusieurs fois comme indiqué ci-dessous (en ignorant les informations non pertinentes) :
begin:vevent uid:tu1586072026 dtstamp:20240125t161430z summary:my meeting description:none ... created:20231004t161313z last-modified:20231023t162939z end:vevent
Mon problème réside dans le décodage de la dernière valeur modifiée.
Si je cours :
print("dtstamp: " + str(component.get('dtstamp').dt)) print("created: " + str(component.get('created').dt)) print("modified: " + str(component.get('last-modified').dt))
J'ai eu l'erreur après avoir imprimé les deux premiers de la bonne manière :
dtstamp: 2024-01-25 16:14:30+00:00 created: 2023-10-04 16:13:13+00:00 traceback (most recent call last): file "/usr/lib/python3.11/tkinter/__init__.py", line 1948, in __call__ return self.func(*args) ^^^^^^^^^^^^^^^^ file "/home/sailslack/coding/python/pim/cal_import.py", line 97, in ical_import print("modified: " + str(component.get('last-modified').dt)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ attributeerror: 'nonetype' object has no attribute 'dt'
Si je n'utilise pas l'attribut .dt sur la dernière ligne :
print("dtstamp: " + str(component.get('dtstamp').dt)) print("created: " + str(component.get('created').dt)) print("modified: " + str(component.get('last-modified')))
Je ne reçois aucune erreur, mais :
dtstamp: 2024-01-25 16:14:30+00:00 created: 2023-10-04 16:13:13+00:00 modified: vDDDTypes(2023-10-23 16:29:39+00:00, Parameters({}))
On dirait que je devrais utiliser l'attribut .dt comme les autres attributs.
Qu'est-ce que j'ai fait de mal ?
MISE À JOUR : Cet exemple fonctionne dans mon environnement python et utilise désormais un bloc try pour gérer les composants manquants :
from icalendar import calendar from datetime import datetime with open('icalendar.ics', 'rb') as e: ecal = calendar.from_ical(e.read()) for component in ecal.walk(): if component.name == 'vevent': print(component.name) com_attr = ['created','dtstamp','last-modified'] for timing in com_attr: try: print(f"{timing}: {component.get(timing).dt}") except attributeerror: print(f"{timing} -> does not exist!") com_text = ['uid','summary','description'] for tex in com_text: try: print(f"{tex}: {component.get(tex)}") except attributeerror: print(f"{tex} -> does not exist!")
La sortie, par exemple l'heure de la dernière modification est manquante :
VEVENT CREATED: 2023-10-04 16:13:13+00:00 DTSTAMP: 2024-01-25 16:14:30+00:00 LAST-MODIFIED -> does not exist! UID: TU1586072026 SUMMARY: My meeting DESCRIPTION: None
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!