Problem bei der Verwendung von icalendar zum Parsen von vDDDTypes-Daten in Python

PHPz
Freigeben: 2024-02-13 10:00:05
nach vorne
894 Leute haben es durchsucht

Problem bei der Verwendung von icalendar zum Parsen von vDDDTypes-Daten in Python

Frageninhalt

Wie Sie dem Folgenden wahrscheinlich entnehmen können, bin ich kein sehr erfahrener Programmierer. Nichtsdestotrotz versuche ich, ein Python-Programm zu schreiben, um Daten aus einer Datei im Icalendar-Format zu importieren und in einer Datenbank zu speichern. Die Datei wird wie unten gezeigt mehrmals angezeigt (irrelevante Informationen werden übersprungen):

begin:vevent
uid:tu1586072026
dtstamp:20240125t161430z
summary:my meeting
description:none
...
created:20231004t161313z
last-modified:20231023t162939z
end:vevent
Nach dem Login kopieren

Mein Problem liegt in der Dekodierung des zuletzt geänderten Werts.

Wenn ich renne:

print("dtstamp: " + str(component.get('dtstamp').dt))
    print("created: " + str(component.get('created').dt))
    print("modified: " + str(component.get('last-modified').dt))
Nach dem Login kopieren

Ich habe den Fehler erhalten, nachdem ich die ersten beiden richtig gedruckt habe:

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'
Nach dem Login kopieren

Wenn ich das .dt-Attribut in der letzten Zeile nicht verwende:

print("dtstamp: " + str(component.get('dtstamp').dt))
    print("created: " + str(component.get('created').dt))
    print("modified: " + str(component.get('last-modified')))
Nach dem Login kopieren

Ich bekomme keine Fehler, aber:

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({}))
Nach dem Login kopieren

Sieht so aus, als ob ich das .dt-Attribut wie andere Attribute verwenden sollte.

Was habe ich falsch gemacht?


Richtige Antwort


UPDATE: Dieses Beispiel funktioniert in meiner Python-Umgebung und verwendet jetzt einen Try-Block, um fehlende Komponenten zu verarbeiten:

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!")
Nach dem Login kopieren

Ausgabe, z. B. die letzte Änderungszeit fehlt:

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
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonProblem bei der Verwendung von icalendar zum Parsen von vDDDTypes-Daten in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!