Maison  >  Article  >  développement back-end  >  Problème lors de l'utilisation d'icalendar pour analyser les données vDDDTypes en python

Problème lors de l'utilisation d'icalendar pour analyser les données vDDDTypes en python

PHPz
PHPzavant
2024-02-13 10:00:05935parcourir

Problème lors de lutilisation dicalendar pour analyser les données vDDDTypes en python

Contenu de la question

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 ?


Bonne réponse


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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer