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

PHPz
Libérer: 2024-02-13 10:00:05
avant
895 Les gens l'ont consulté

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
Copier après la connexion

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))
Copier après la connexion

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'
Copier après la connexion

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')))
Copier après la connexion

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({}))
Copier après la connexion

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!")
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!