2016-11-23 1 views
0

Ich habe eine ical-Datei, die ich in einem JSON-Array-Format mit Python lesen möchte. Ich habe festgestellt, dass es ein Paket namens icalendar 3.11 gibt, aber es übersetzt nicht den iCalendar Text in ein JSON-Array-Format.Wie erstellt man ein JSON-Array aus einer Icalendar-Datei mit Python?

siehe unten icalendar Text:

BEGIN:VCALENDAR 
PRODID;X-RICAL-TZSOURCE=TZINFO:-//Airbnb Inc//Hosting Calendar 0.8.8//EN 
CALSCALE:GREGORIAN 
VERSION:2.0 
BEGIN:VEVENT 
DTEND;VALUE=DATE:20161111 
DTSTART;VALUE=DATE:20161110 
UID:[email protected] 
DESCRIPTION:CHECKIN: 11/10/2016\nCHECKOUT: 11/11/2016\nNIGHTS: 1\nPHONE: 
+1 (111) 111-1111\nEMAIL: [email protected]\nPRO 
PERTY: Rittenhouse Square Cozy Studio Apartment\n 
SUMMARY:John Smith (XXXXXX) 
LOCATION:Rittenhouse Square Cozy Studio Apartment 
END:VEVENT 
BEGIN:VEVENT 
DTEND;VALUE=DATE:20170104 
DTSTART;VALUE=DATE:20170102 
UID:[email protected] 
DESCRIPTION:CHECKIN: 01/02/2017\nCHECKOUT: 01/04/2017\nNIGHTS: 2\nPHONE: 
+1 (222) 222-2222\nEMAIL: [email protected]\nPROP 
ERTY: Rittenhouse Square Cozy Studio Apartment\n 
SUMMARY:Abe Lincoln (XXXXXX) 
LOCATION:Rittenhouse Square Cozy Studio Apartment 
END:VEVENT 
END:VCALENDAR 

Verwendung iCalendar Paket here, habe ich versucht, die folgenden:

from icalendar import Calendar 

result = Calendar().from_ical(ical_content) 

Ergebnis

VCALENDAR({u'CALSCALE': vText('GREGORIAN'), u'VERSION': vText('2.0'), u'PRODID': vText('-//Airbnb Inc//Hosting Calendar 0.8.8//EN')}, VEVENT({u'LOCATION': vText('Rittenhouse Square Cozy Studio Apartment'), u'DESCRIPTION': vText('CHECKIN: 11/10/2016\nCHECKOUT: 11/11/2016\nNIGHTS: 1\nPHONE: +1 (111) 111-1111\nEMAIL: [email protected]\nPROPERTY: Rittenhouse Square Cozy Studio Apartment\n'), u'UID': vText('[email protected]'), u'DTEND': <icalendar.prop.vDDDTypes object at 0x1041e5610>, u'DTSTART': <icalendar.prop.vDDDTypes object at 0x1041e58d0>, u'SUMMARY': vText('John Smith (XXXXXX)')}),VEVENT({u'LOCATION': vText('Rittenhouse Square Cozy Studio Apartment'), u'DESCRIPTION': vText('CHECKIN: 01/02/2017\nCHECKOUT: 01/04/2017\nNIGHTS: 2\nPHONE: +1 (222) 222-2222\nEMAIL: [email protected]\nPROPERTY: Rittenhouse Square Cozy Studio Apartment\n'), u'UID': vText('[email protected]'), u'DTEND': <icalendar.prop.vDDDTypes object at 0x10441c690>, u'DTSTART': <icalendar.prop.vDDDTypes object at 0x10441c6d0>, u'SUMMARY': vText('Abe Lincoln (XXXXXX)')})) 

Wie kann ich diese icalendar verwandeln Text in ein JSON-Array?

Antwort

0

Sehr böse Art und Weise, aber die Arbeit machen:

ical_content = """ 
BEGIN:VCALENDAR 
PRODID;X-RICAL-TZSOURCE=TZINFO:-//Airbnb Inc//Hosting Calendar 0.8.8//EN 
CALSCALE:GREGORIAN 
VERSION:2.0 
BEGIN:VEVENT 
DTEND;VALUE=DATE:20161111 
DTSTART;VALUE=DATE:20161110 
UID:[email protected] 
DESCRIPTION:CHECKIN: 11/10/2016\nCHECKOUT: 11/11/2016\nNIGHTS: 1\nPHONE: 
+1 (111) 111-1111\nEMAIL: [email protected]\nPRO 
PERTY: Rittenhouse Square Cozy Studio Apartment\n 
SUMMARY:John Smith (XXXXXX) 
LOCATION:Rittenhouse Square Cozy Studio Apartment 
END:VEVENT 
BEGIN:VEVENT 
DTEND;VALUE=DATE:20170104 
DTSTART;VALUE=DATE:20170102 
UID:[email protected] 
DESCRIPTION:CHECKIN: 01/02/2017\nCHECKOUT: 01/04/2017\nNIGHTS: 2\nPHONE: 
+1 (222) 222-2222\nEMAIL: [email protected]\nPROP 
ERTY: Rittenhouse Square Cozy Studio Apartment\n 
SUMMARY:Abe Lincoln (XXXXXX) 
LOCATION:Rittenhouse Square Cozy Studio Apartment 
END:VEVENT 
END:VCALENDAR 
""" 

import icalendar 
from icalendar import Calendar 

result = Calendar().from_ical(ical_content) 

import json 

r = [] 
for key, value in result.property_items(): 
    inner_d = {} 
    if isinstance(value, icalendar.prop.vDDDTypes): 
     inner_d[key] = value.dt.isoformat() 
    else: 
     inner_d[key] = value 
    r.append(inner_d) 

u = json.dumps(r, indent=4) 
print(u) 

Und der Ausgang ist:

[ 
    { 
     "BEGIN": "VCALENDAR" 
    }, 
    { 
     "VERSION": "2.0" 
    }, 
    { 
     "PRODID": "-//Airbnb Inc//Hosting Calendar 0.8.8//EN" 
    }, 
    { 
     "CALSCALE": "GREGORIAN" 
    }, 
    { 
     "BEGIN": "VEVENT" 
    }, 
    { 
     "SUMMARY": "John Smith (XXXXXX)" 
    }, 
    { 
     "DTSTART": "2016-11-10" 
    }, 
    { 
     "DTEND": "2016-11-11" 
    }, 
    { 
     "UID": "[email protected]" 
    }, 
    { 
     "CHECKOUT": " 11/11/2016" 
    }, 
    { 
     "DESCRIPTION": "CHECKIN: 11/10/2016" 
    }, 
    { 
     "EMAIL": " [email protected]" 
    }, 
    { 
     "LOCATION": "Rittenhouse Square Cozy Studio Apartment" 
    }, 
    { 
     "NIGHTS": " 1" 
    }, 
    { 
     "PHONE": "+1 (111) 111-1111" 
    }, 
    { 
     "PROPERTY": " Rittenhouse Square Cozy Studio Apartment" 
    }, 
    { 
     "END": "VEVENT" 
    }, 
    { 
     "BEGIN": "VEVENT" 
    }, 
    { 
     "SUMMARY": "Abe Lincoln (XXXXXX)" 
    }, 
    { 
     "DTSTART": "2017-01-02" 
    }, 
    { 
     "DTEND": "2017-01-04" 
    }, 
    { 
     "UID": "[email protected]" 
    }, 
    { 
     "CHECKOUT": " 01/04/2017" 
    }, 
    { 
     "DESCRIPTION": "CHECKIN: 01/02/2017" 
    }, 
    { 
     "EMAIL": " [email protected]" 
    }, 
    { 
     "LOCATION": "Rittenhouse Square Cozy Studio Apartment" 
    }, 
    { 
     "NIGHTS": " 2" 
    }, 
    { 
     "PHONE": "+1 (222) 222-2222" 
    }, 
    { 
     "PROPERTY": " Rittenhouse Square Cozy Studio Apartment" 
    }, 
    { 
     "END": "VEVENT" 
    }, 
    { 
     "END": "VCALENDAR" 
    } 
] 

Hope this Hilfe :)

+0

Es ist - das einzige Problem, dass Sie ist‘ zeigt nur eines der Ergebnisse. Zum Beispiel, was ist mit John Smith in der ursprünglichen ical Veranstaltung? – Chris

+0

Oh, hol es :) die gleichen Tasten - w8 eine Sekunde werde ich eine Bearbeitung machen. – opalczynski

+0

@Chris jetzt überprüfen. – opalczynski

Verwandte Themen