Heim >Backend-Entwicklung >Python-Tutorial >Problem bei der Verwendung von icalendar zum Parsen von vDDDTypes-Daten in Python
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
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))
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'
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')))
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({}))
Sieht so aus, als ob ich das .dt-Attribut wie andere Attribute verwenden sollte.
Was habe ich falsch gemacht?
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!")
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
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!