Programme Python qui convertit les données ical en texte

Les données exportées du calendrier OS X et de Google Agenda sont au format ical, mais il est un peu gênant de les afficher même si elles sont enregistrées telles quelles en tant qu'enregistrement passé, donc un fichier texte avec la date et l'heure et le nom de l'événement sur une seule ligne Je voulais le garder. J'ai cherché sur le net et j'ai trouvé le package icalendar pour Python.

Paquet de bibliothèque Icalendar pour Python

Téléchargez le package qui gère le format ical en Python à partir du site suivant.

https://pypi.python.org/pypi/icalendar

Au moment où je l'ai téléchargé, c'était icalendar 3.10 et il prend en charge Python 2.6, 2.7 et 3.3+.

Installation du package

Décompressez le fichier .zip téléchargé à partir de ce qui précède, déplacez-vous vers ce dossier dans le terminal et installez avec la commande suivante.

$ python setup.py install



## Un programme qui récupère les événements des données ical
 Le programme Python qui lit un fichier au format ical et le produit en sortie standard est le suivant.

 L'utilisation est la suivante


#### **`$ python iCal2txt.py file | sort > output file`**
```py file | sort > output file


 Exemple d'utilisation: `` `` $ python iCal2txt.py yotei2016.ical | sort> calendar2016.txt` ``
 Désormais, "calendar2016.txt" est généré sous forme de données texte qui extrait la date et l'heure et le nom de l'événement des données de "yotei2016.ical" et les trie par ordre de date et d'heure.

 La source du programme Python est la suivante


#### **`iCal2txt.py`**
```python

#!/usr/bin/python
# -*- coding: utf-8 -*-

import codecs
import sys
from icalendar import Calendar, Event
from datetime import datetime

argvs = sys.argv
fin = codecs.open(argvs[1])
cal = Calendar.from_ical(fin.read())
body = ""
for ev in cal.walk():
    if ev.name == 'VEVENT':
        start_dt = ev.decoded("dtstart")
        end_dt = ev.decoded("dtend")
        summary = ev['summary'].encode('utf-8')
        print "{start} - {end} : {summary}".format(start=start_dt.strftime("%Y/%m/%d %H:%M"), end=end_dt.strftime("%Y/%m/%d %H:%M"), summary=summary)
        

Quelle heure était cet événement avec ce fichier? C'est facile à découvrir.

J'avais l'habitude d'écrire un script qui récupère un fichier similaire à partir d'une application iCal avec AppleScript, mais l'écrire en Python est assez facile et j'aime Python. (Parce qu'il y avait un paquet)

(Ajout) Sortie dans un fichier avec l'extension du nom du fichier d'entrée comme .txt

Si vous n'avez pas besoin de trier, il est difficile de spécifier le fichier de sortie, j'ai donc ajouté .txt au nom du fichier d'entrée et l'ai sorti.

ical2txt2.py


#!/usr/bin/python
# -*- coding: utf-8 -*-

import codecs
import os
import sys
from icalendar import Calendar, Event
from datetime import datetime

argvs = sys.argv
fin = codecs.open(argvs[1])
cal = Calendar.from_ical(fin.read())
fin.close()
ldata = ""
for ev in cal.walk():
    if ev.name == 'VEVENT':
        start_dt = ev.decoded("dtstart")
        end_dt = ev.decoded("dtend")
        summary = ev['summary'].encode('utf-8')
        ldata += "{start} - {end} : {summary}".format(start=start_dt.strftime("%Y/%m/%d %H:%M"), end=end_dt.strftime("%Y/%m/%d %H:%M"), summary=summary) + os.linesep
fname,ext = (sys.argv[1]).split(".",1)
fout = fname + ".txt"
f = codecs.open(fout, "w")
f.write(ldata)
f.close()

(Addition 2) Sortie du résultat trié dans un fichier .txt

Lors du tri dans le programme, les caractères étaient déformés, j'ai donc essayé de sortir avant le tri comme décrit ci-dessus, mais j'ai pu éliminer les caractères déformés. La source est la suivante. Modifiez le code de saut de ligne de sortie en fonction de votre environnement. (Puisque le comportement de os.linesep était étrange, le code de saut de ligne est spécifié directement.)

Exemple d'utilisation: $ python ical2txt.py yotei2016.ics` ``

ical2txt3.py


#!/usr/bin/python
# -*- coding: utf-8 -*-

import codecs
import os
import sys
from icalendar import Calendar, Event
from datetime import datetime

argvs = sys.argv
fin = codecs.open(argvs[1])
cal = Calendar.from_ical(fin.read())
fin.close()
li = []
for ev in cal.walk():
    if ev.name == 'VEVENT':
        start_dt = ev.decoded("dtstart")
        end_dt = ev.decoded("dtend")
        summary = ev['summary'].encode('utf-8')
        li.append("{start} - {end} : {summary}".format(start=start_dt.strftime("%Y/%m/%d %H:%M"), end=end_dt.strftime("%Y/%m/%d %H:%M"), summary=summary).decode('utf-8'))
li.sort()
fname,ext = (sys.argv[1]).split(".",1)
fout = fname + ".txt"
f = codecs.open(fout, "w")
for ld in li:
    f.write(ld.encode('utf-8') + "\n")
f.close()

Recommended Posts

Programme Python qui convertit les données ical en texte
Programme Python qui agrège l'utilisation du temps à partir des données icalendar
Un script python qui convertit les données Oracle Database en csv
[Python] Un programme qui arrondit le score
Un programme python qui redimensionne une vidéo et la transforme en image
Un programme qui supprime les instructions en double en Python
Un site qui convertit les commandes curl en requêtes
[Python] Un programme qui compte le nombre de vallées
Recevez des données de dictionnaire à partir de programmes Python avec AppleScript
Python qui fusionne beaucoup d'excellence en un seul Excel
Jusqu'à ce que vous insériez des données dans une feuille de calcul en Python
Un serveur qui fait écho aux données POSTées avec flask / python
[Python] Une bibliothèque pratique qui convertit les kanji en hiragana
[Python] Un programme qui compare les positions des kangourous.
Programme qui résume les données csv de l’historique des transactions de l’action SBI Securities [Python3]
J'ai fait un texte Python
Programme Python du "Livre qui enseigne facilement la programmation difficile"
Un programme polyvalent qui formate les chaînes de commande Linux avec python
Une fonction qui divise l'itérable en N morceaux en Python
Publication d'une bibliothèque qui masque les données de caractères dans les images Python
Un programme qui supprime des caractères spécifiques du texte saisi
AnimeGAN Yaru (Windows10, Python3.6) qui convertit les prises de vue en direct en style anime
Cartoonisation en boîte blanche qui convertit les prises de vue en direct en style anime (Windows10, Python3.6)
J'ai essayé "un programme qui supprime les déclarations en double en Python"
[Python] Un programme qui crée un tableau à deux dimensions en combinant des entiers
[Python] Un programme qui trouve les types d'oiseaux les plus courants
[Python] Une histoire qui semblait tomber dans un piège à contourner
[Ev3dev] Créez un programme qui capture LCD (écran) en utilisant python
Un programme qui détermine si un nombre entré en Python est un nombre premier
[Algorithme Python] Un programme qui génère des réponses en allemand et en allemand à partir de la recherche de priorité en profondeur
Lors de l'écriture d'un programme en Python
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
[Python] Un programme qui trouve une paire qui peut être divisée par une valeur spécifiée
J'ai créé une application Web en Python qui convertit Markdown en HTML
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Résumé du livre électronique Python utile pour l'analyse de données gratuite
Création de Simple SQLite, une bibliothèque Python qui simplifie la création de table SQLite / l'insertion de données
Lecture de code de faker, une bibliothèque qui génère des données de test en Python
J'ai fait un programme de gestion de la paie en Python!
Python3 + pyperclip qui réécrit le texte copié
Ecrire un programme de chiffrement Caesar en Python
[Python] Créez un LineBot qui s'exécute régulièrement
Un monde typé qui commence par Python
J'ai créé un programme en Python qui lit les données FX CSV et crée un grand nombre d'images de graphiques
[Python, PyPDF2] Un script qui divise un PDF étalé en deux à gauche et à droite
[Débutant] Que se passe-t-il si j'écris un programme qui s'exécute sur php en Python?
Formatez les données DataFrame avec Pytorch sous une forme pouvant être entraînée avec NN
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
[Python] Un programme qui trouve les valeurs minimales et maximales sans utiliser de méthodes
[Python] Un programme qui calcule la différence entre les valeurs totales diagonales
[Python] Un programme qui calcule le nombre de mises à jour des enregistrements les plus élevés et les plus faibles
Créez une application Web qui convertit le PDF en texte à l'aide de Flask et PyPDF2
Un programme qui envoie une quantité fixe de courrier à un moment spécifié par Python
Script pour convertir entre le fichier de langue Django (PO) et le texte délimité par des tabulations (TSV)
Créez des données de test comme ça avec Python (partie 1)
Un mémo que j'ai écrit un tri rapide en Python
[Python / Tkinter] Une classe qui crée un cadre défilable