[PYTHON] Lorsqu'un fichier est placé dans le dossier partagé de Raspberry Pi, le processus est exécuté.

Effectue le traitement lorsque les fichiers sont placés dans le dossier partagé de Raspberry Pi

  1. Créez un dossier partagé dans Raspeye
  2. Surveillez l'état des dossiers partagés
  3. Si le dossier est mis à jour, exécutez le processus Dans cet exemple ・ Lorsque des fichiers Excel (xls, xlsx) sont placés dans le dossier partagé de Raspeye Dessinez un graphique avec matplotlib et sortie EPS ・ De plus, le fichier converti du format eps au format emf est sorti.

Le traitement de l'échantillon à exécuter est le programme que j'ai noté jusqu'à présent. (1) Graphique des données Excel avec matplotlib (1) (2) [Convertir le graphe matplotlib au format de fichier emf] (http://qiita.com/gitytm15/items/418ddcd8f58555d7433b) (3) J'ai essayé de changer Inkscape of Raspeye de 0,48 à 0,92

C'est une tarte à la râpe, alors j'aime que ça ne me dérange pas tellement même si je la commence tout le temps.

1. Créez un dossier partagé dans Raspeye

Tout d'abord, créez un dossier partagé auquel vous pouvez accéder de n'importe où pour que le programme s'exécute lorsque vous placez les fichiers xlsx et xls dans le dossier [DATA] partagé.

[partager] ← dossier partagé  │ └ [DATA] Mettez xlsx, xls ici pour que le programme de conversion soit exécuté   │ ├ [eps] Enregistrer le fichier eps └ [emf] Enregistrer le fichier emf

Il y a beaucoup d'endroits auxquels se référer dans la recherche, mais je me suis référé ici pour la méthode de partage par samba de Raspeye.

[hiramine.com] (http://www.hiramine.com/physicalcomputing/raspberrypi3/samba_installconfigconnect.html)

Ici, / home / pi est partagé, mais comme c'est un problème si la zone sous pi est complètement visible, j'ai décidé de créer un dossier `` `` [share] '' `` en dessous. Au début, je ne correspondais pas aux noms de dossier `` `` [share] '' `` et `` `` path = / home / share, et le partage ne fonctionnait pas, donc j'étais inquiet pendant un moment. Le flux approximatif est le suivant.

Installation

sudo apt-get update
sudo apt-get install samba

Réécriture du fichier de paramètres (ajouté à la dernière ligne)

sudo nano /etc/samba/smb.conf

smb.conf


#Dernier ajouté
[share]
path = /home/pi/share
read only = No
guest ok = Yes
force user = pi
sudo service smbd restart

Vous pouvez désormais y accéder depuis Windows, Mac et Ubuntu.

2. Surveillez l'état des dossiers partagés

C'est un code concret sur la façon de surveiller et ce qu'il fait réellement, mais il y a déjà un bon article là-bas. Je l'ai utilisé comme référence. Celui que j'ai utilisé est le `` chien de garde ''

・ [Watchdog est assez pratique pour la surveillance des fichiers] (http://qiita.com/PyYoshi@github/items/9744a138c018734c69db)

watchdog peut être installé avec pip install watchdog```. Juste pour être sûr.

3. Exécuter lorsqu'il y a une mise à jour

Voir sample1.py ci-dessous pour le code. C'est la partie principale à surveiller et à exécuter.

explication facile En plus d'importer autour de watchdog, importez le module pour exécution.

import sample2

Ici, nous faisons cela pour exécuter le code dans sample2.py. (Remplacez cette partie par un fichier exécutable arbitraire)

sample2.py résume les deux codes ci-dessous. Graphique des données Excel avec matplotlib (1) [Convertir le graphique matplotlib au format de fichier emf] (http://qiita.com/gitytm15/items/418ddcd8f58555d7433b)

Étant donné que la cible de surveillance pour les mises à jour de fichiers est ici un fichier Excel, définissez l'extension comme ceci.

#Fichiers à surveiller
observed_file_type = ('.xls','.xlsx')

Définissez le dossier partagé de la tarte à la râpe créée précédemment sur BASEDIR. À l'origine, BASEDIR indique l'emplacement du corps du fichier

#BASEDIR = os.path.abspath(os.path.dirname(__file__))

Bien que ce soit le cas, il est commenté ici. Cette fois, l'adresse du dossier partagé de Raspeye est spécifiée comme suit.

BASEDIR ='/home/pi/share/DATA'

Vient ensuite la partie exécution lorsqu'un événement se produit. Ce code sera entré pour chaque événement. Je jette le chemin du fichier Excel mis à jour.

sample2.plot(event.src_path) #Exécuter lors de la création du fichier

Lorsque vous exécutez sample1.py, Raspai entre dans le mode de surveillance du dossier spécifié. Il sera exécuté chaque fois que vous déplacerez le fichier Excel dans le dossier spécifié, le modifierez et l'enregistrerez. Ce fichier Excel correspond à la structure qui place X en A1 et Y en B1 dans le tracé de l'axe XY. excel.png

sample1.py


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

import time
import os
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
import sample2 #← Module à exécuter en fonction de la mise à jour(Ici, sample2)

#Fichiers à surveiller
observed_file_type = ('.xls','.xlsx')

#Réglage
#BASEDIR = os.path.abspath(os.path.dirname(__file__))
#→ Si vous souhaitez surveiller l'emplacement de ce fichier programme

#Spécifiez un dossier partagé pour Raspeye
#dossier partagé[share]Dans,[DATA]Placé le dossier
BASEDIR ='/home/pi/share/DATA'

#Vérifiez si le fichier modifié est surveillé
def match(path):
    return any([path.endswith(ft) for ft in observed_file_type])

#Gestionnaire d'événements au moment du changement
class ChangeHandler(FileSystemEventHandler):
    def on_create(self, event):
        if event.is_directory:
            return
        if match(event.src_path):
            print('Create',event.src_path)
            sample2.plot(event.src_path) #Exécuter lors de la création du fichier

    def on_modified(self, event):
        if event.is_directory:
            return
        if match(event.src_path):
            print('Modified',event.src_path)
            sample2.plot(event.src_path) #Exécuter lors du changement de fichier

    def on_deleted(self, event):
        if event.is_directory:
            return
        if match(event.src_path):
            print('delete',event.src_path)
            #Ne rien faire lorsque le fichier est supprimé


if __name__ in '__main__':
    event_handler = ChangeHandler()
    observer = Observer()
    observer.schedule(event_handler, BASEDIR, recursive=True)
    print('start dir=',BASEDIR)
    observer.start()
    try:
        while True:
            time.sleep(0.1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

4. Module de traçage et de conversion de fichiers

Il est appelé lorsque le fichier Excel est mis à jour ou lorsqu'un nouveau fichier est créé.

Le chemin Excel sera jeté, alors lisez ce fichier Excel et tracez-le. Après cela, dessinez un graphique et enregistrez-le au format eps, et convertissez-le en même temps du fichier svg en fichier emf et enregistrez-le. Supprimez le fichier svg d'origine.

Les modules requis sont: ・ Pandas ・ Matplotlib ・ Sous-processus

sample2.py



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

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import subprocess
import os

#Spécifiez l'emplacement du fichier de police ubuntu(C:\Windows\Fonts\Toute police)
fp = FontProperties(fname="/usr/share/fonts/truetype/fonts-japanese-gothic.ttf") 

def dataload(path):    #Charger dans Pandas DataFrame
    df=pd.read_excel(path)
    return df

def graph(df):

    #Lire les données des axes X et Y à partir du bloc de données
    #Spécifié par colonne
    x=df[[0]]
    y=df[[1]]

    #Graph
    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    ax1.set_yscale('linear')
    
    #ax1.set_yscale('log')
    #ax1.set_ylim(-1.1, 1.1)
    #ax1.set_xlim(0,360)

    ax1.set_title("Exemple de graphique",fontdict = {"fontproperties": fp},fontsize=12)
    ax1.set_xlabel("axe x",fontdict = {"fontproperties": fp},fontsize=12)
    ax1.set_ylabel("axe y",fontdict = {"fontproperties": fp},fontsize=12)

    ax1.scatter(x, y,s=1,c='r',label='sin')
    ax1.legend(loc="upper right")


def graph_save(path):
    
    SAVEDIR=os.path.dirname(path) #Chemin du fichier
    fname, ext = os.path.splitext( os.path.basename(path) ) #Nom de fichier uniquement
    
    plt.savefig(SAVEDIR+'/eps/'+fname+".eps") #eps enregistrer
    plt.savefig(SAVEDIR+fname+".svg") #Enregistrer en tant que svg pour la conversion emf
    
    call_cmd='inkscape ' + SAVEDIR+fname + '.svg -M ' + SAVEDIR+'/emf/'+fname +'.emf'
    subprocess.call(call_cmd,shell=True)
    
    os.remove(SAVEDIR+fname+".svg") #Je n'ai pas besoin de svg, alors supprimez-le


def plot(path):

    #Appelé depuis un programme de surveillance

    df=dataload(path) #Charger Excel en tant que cadre de données pandas
    graph(df) #Dessin graphique avec matplotlib
    graph_save(path) #Enregistrer et convertir des graphiques

if __name__ == '__main__':
    SAVEDIR='/home/pi/share/DATA/'
    path='/home/pi/Desktop/sample.xlsx'
    plot(path)


c'est tout

Recommended Posts

Lorsqu'un fichier est placé dans le dossier partagé de Raspberry Pi, le processus est exécuté.
Obtenez l'emplacement du fichier où se trouve l'exe lors de l'exécution de l'exe créé par PyInstaller
Traitez le contenu du fichier dans l'ordre avec un script shell
Obtenir le nom de fichier dans un dossier à l'aide de glob
Traitez les fichiers du dossier dans l'ordre avec le script shell
[Note] Importation de fichiers dans le répertoire parent en Python
Changer le message affiché lors de la connexion à Raspberry Pi
Y a-t-il un secret dans la fréquence des nombres de rapport de circonférence?
Notez ce que vous voulez faire à l'avenir avec Razpai
Lorsqu'une chaîne de caractères d'une certaine série se trouve dans la clé du dictionnaire, la chaîne de caractères est convertie en valeur du dictionnaire.
Écrivez un script dans Shell et Python pour vous avertir dans Slack lorsque le processus est terminé
Sous Linux, l'horodatage d'un fichier est un peu dépassé.
Quoi qu'il en soit, le journal de communication série le plus rapide est laissé dans le fichier
L'histoire du "trou" dans le fichier
[Python] Que faire en cas de violation de PEP8 lors du processus d'importation à partir du répertoire ajouté à sys.path
Afficher la force du signal RSSI d'un SSID spécifique (raspberry pi (linux))
Quel est le fichier XX à la racine d'un projet Python populaire?
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
[Linux] Une commande pour obtenir une liste des commandes exécutées dans le passé
Lorsque ssh de Raspeye 4 est très lent, il est bon de désactiver IPv6
Afficher le chemin complet (chemin absolu) d'un fichier dans un répertoire sous Linux Bash
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Implémenter une partie du processus en C ++
Lorsque la cible est Ubuntu 16.04 dans Ansible
[python] [meta] Le type de python est-il un type?
J'ai créé un script pour vérifier si l'anglais est entré dans la position spécifiée du fichier JSON en Python.
Expliquez doucement le processus de création d'une simple caméra de surveillance sans serveur à l'aide de Raspeye, de l'API Gmail et de l'API Line
Différentes façons de lire la dernière ligne d'un fichier csv en Python
La synchronisation de la sortie est incorrecte lorsque la sortie standard (erreur) est convertie en fichier en Python
Différences de comportement de chaque langage LL lorsque l'index de la liste est ignoré
N'oubliez pas de fermer le fichier simplement parce qu'il se trouve dans un dossier temporaire
Comment faire un Raspberry Pi qui parle les tweets d'un utilisateur spécifié
[Python] Récupérez les fichiers dans le dossier avec Python
Récupérer l'appelant d'une fonction en Python
Copiez la liste en Python
Trouvez le nombre de jours dans un mois
Sortie sous la forme d'un tableau python
Comment définir un dossier partagé avec le système d'exploitation hôte dans CentOS7 sur Virtual BOX
[Solution] Lorsque "0001" est inséré dans la colonne de chaîne de sqlite3, il est entré comme "1".
Comment afficher la date de modification d'un fichier en langage C jusqu'à nanosecondes
Réalisez une maison super IoT en acquérant des données de capteur dans la maison avec Raspberry Pi
Une note qui implémente une tâche en Python qui charge un fichier GCS dans BigQuery
[Raspberry Pi] Lorsque le capteur humain le détecte, stockez l'horodatage dans la base de données Firebase Realtime.
Lors de la lecture d'un fichier csv avec read_csv de pandas, la première colonne devient index
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
[Attention] Lors de la création d'une image binaire (1 bit / pixel), faites attention au format de fichier!
Lorsqu'une variable locale portant le même nom que la variable globale est définie dans la fonction
Je souhaite être informé de l'environnement de connexion lorsque RaspberryPi se connecte au réseau
Créez un fichier dox avec des vignettes des photos dans le dossier en utilisant la bibliothèque Python python-docx et le logiciel gratuit «Réduction uniquement».
Vérifiez si la chaîne est un nombre en python
Ceci est un exemple d'application de fonction dans dataframe.
Lorsque l'objet sélectionné dans bpy.context.selected_objects n'est pas renvoyé
Déterminer et traiter automatiquement l'encodage du fichier texte
Soyez prudent lors de la différenciation des vecteurs propres d'une matrice
Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
Incorporation dans datetime lorsque seule l'heure est connue
Le problème Zip 4 Gbyte est une histoire du passé