[PYTHON] Wenn eine Datei im freigegebenen Ordner von Raspberry Pi abgelegt wird, wird der Vorgang ausgeführt.

Führt die Verarbeitung durch, wenn Dateien im freigegebenen Ordner von Raspberry Pi abgelegt werden

  1. Erstellen Sie einen freigegebenen Ordner in Raspeye
  2. Überwachen Sie den Status freigegebener Ordner
  3. Wenn der Ordner aktualisiert wird, führen Sie den Vorgang aus In diesem Beispiel ・ Wenn Excel-Dateien (xls, xlsx) im freigegebenen Ordner von Raspeye abgelegt werden Zeichnen Sie ein Diagramm mit matplotlib und geben Sie EPS aus ・ Außerdem wird die vom EPS in das EMF-Format konvertierte Datei ausgegeben.

Die auszuführende Beispielverarbeitung ist das Programm, das ich bisher notiert habe. (1) Excel-Daten mit matplotlib (1) grafisch darstellen (2) [Matplotlib-Diagramm in EMF-Dateiformat konvertieren] (http://qiita.com/gitytm15/items/418ddcd8f58555d7433b) (3) Ich habe versucht, die Inkscape of Raspeye von 0,48 auf 0,92 zu ändern

Es ist ein Raspeltorte, also mag ich es, dass es mich nicht so sehr stört, selbst wenn ich es die ganze Zeit anfange.

1. Erstellen Sie einen freigegebenen Ordner in Raspeye

Erstellen Sie zunächst einen freigegebenen Ordner, auf den von überall aus zugegriffen werden kann, damit das Programm ausgeführt wird, wenn Sie die Dateien xlsx und xls in den freigegebenen Ordner [DATA] legen.

[freigeben] ← freigegebener Ordner  │ └ [DATA] Fügen Sie hier xlsx, xls ein, damit das Konvertierungsprogramm ausgeführt wird   │ ├ [eps] Eps-Datei speichern └ [emf] EMF-Datei speichern

Es gibt viele Stellen, auf die bei der Suche Bezug genommen werden kann, aber ich habe hier auf die Freigabemethode von Samba von Raspeye verwiesen.

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

Hier wird `/ home / pi``` geteilt, aber da es ein Problem ist, wenn der Bereich unter pi vollständig sichtbar ist, habe ich beschlossen, einen Ordner` [share] `darunter zu erstellen. Zuerst stimmte ich nicht mit den Ordnernamen [share] und `path = / home / share``` überein, und die Freigabe funktionierte nicht, so dass ich mir eine Weile Sorgen machte. Die grobe Strömung ist wie folgt.

Installation

sudo apt-get update
sudo apt-get install samba

Umschreiben der Einstellungsdatei (in die letzte Zeile eingefügt)

sudo nano /etc/samba/smb.conf

smb.conf


#Zuletzt hinzugefügt
[share]
path = /home/pi/share
read only = No
guest ok = Yes
force user = pi
sudo service smbd restart

Sie können jetzt von Windows, Mac und Ubuntu darauf zugreifen.

2. Überwachen Sie den Status freigegebener Ordner

Es ist ein konkreter Code, wie man überwacht und was es tatsächlich tut, aber es gibt bereits einen leicht verständlichen Artikel. Ich habe es als Referenz verwendet. Der, den ich benutzt habe, ist "Wachhund"

・ [Watchdog ist sehr praktisch für die Dateiüberwachung] (http://qiita.com/PyYoshi@github/items/9744a138c018734c69db)

watchdog kann mit `` `pip install watchdog``` installiert werden. Nur um sicher zu gehen.

3. Ausführen, wenn ein Update vorliegt

Siehe sample1.py unten für den Code. Dies ist der Hauptteil, der überwacht und ausgeführt werden muss.

einfache Erklärung Importieren Sie das Modul nicht nur um Watchdog herum, sondern auch zur Ausführung.

import sample2

Hier tun wir dies, um den Code in sample2.py auszuführen. (Ersetzen Sie diesen Teil durch eine beliebige ausführbare Datei.)

sample2.py fasst die beiden folgenden Codes zusammen. Excel-Daten mit matplotlib (1) grafisch darstellen [Matplotlib-Diagramm in EMF-Dateiformat konvertieren] (http://qiita.com/gitytm15/items/418ddcd8f58555d7433b)

Da das Überwachungsziel für Dateiaktualisierungen hier eine Excel-Datei ist, legen Sie die Erweiterung wie folgt fest.

#Zu überwachende Dateien
observed_file_type = ('.xls','.xlsx')

Setzen Sie den freigegebenen Ordner des zuvor erstellten Raspelkuchens auf BASEDIR. Ursprünglich gibt BASEDIR den Speicherort des Dateikörpers an

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

Obwohl es so ist, wird es hier auskommentiert. Dieses Mal wird die Adresse des freigegebenen Ordners von Raspeye wie folgt angegeben.

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

Als nächstes folgt der Ausführungsteil, wenn ein Ereignis auftritt. Dieser Code wird für jedes Ereignis eingegeben. Ich werfe den Pfad der aktualisierten Excel-Datei.

sample2.plot(event.src_path) #Beim Erstellen einer Datei ausführen

Wenn Sie sample1.py ausführen, wechselt Raspai in den Überwachungsmodus des angegebenen Ordners. Es wird jedes Mal ausgeführt, wenn Sie die Excel-Datei in den angegebenen Ordner verschieben, bearbeiten und speichern. Diese Excel-Datei entspricht der Struktur, in der X in A1 und Y in B1 im XY-Achsendiagramm eingefügt werden. 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 #← Modul, das gemäß dem Update ausgeführt werden soll(Hier sample2)

#Zu überwachende Dateien
observed_file_type = ('.xls','.xlsx')

#Aufbau
#BASEDIR = os.path.abspath(os.path.dirname(__file__))
#→ Wenn Sie den Speicherort dieser Programmdatei überwachen möchten

#Geben Sie einen freigegebenen Ordner für Raspeye an
#freigegebenen Ordner[share]Im,[DATA]Platzierte den Ordner
BASEDIR ='/home/pi/share/DATA'

#Überprüfen Sie, ob die geänderte Datei überwacht wird
def match(path):
    return any([path.endswith(ft) for ft in observed_file_type])

#Ereignishandler zum Zeitpunkt der Änderung
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) #Beim Erstellen einer Datei ausführen

    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) #Beim Ändern der Datei ausführen

    def on_deleted(self, event):
        if event.is_directory:
            return
        if match(event.src_path):
            print('delete',event.src_path)
            #Tun Sie nichts, wenn die Datei gelöscht wird


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. Modul zum Plotten und zur Dateikonvertierung

Es wird aufgerufen, wenn die Excel-Datei aktualisiert oder eine neue Datei erstellt wird.

Der Excel-Pfad wird ausgelöst. Lesen Sie diese Excel-Datei und zeichnen Sie sie grafisch auf. Zeichnen Sie danach ein Diagramm, speichern Sie es im EPS-Format und konvertieren Sie es gleichzeitig von SVG in EMF-Datei und speichern Sie es. Löschen Sie die ursprüngliche SVG-Datei.

Die erforderlichen Module sind: ・ Pandas ・ Matplotlib ・ Unterprozess

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

#Geben Sie den Speicherort der Ubuntu-Schriftartdatei an(C:\Windows\Fonts\Beliebige Schriftart)
fp = FontProperties(fname="/usr/share/fonts/truetype/fonts-japanese-gothic.ttf") 

def dataload(path):    #Laden Sie in Pandas DataFrame
    df=pd.read_excel(path)
    return df

def graph(df):

    #Lesen Sie die Daten der x- und Y-Achse aus dem Datenrahmen
    #Angegeben durch Spalte
    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("Diagrammbeispiel",fontdict = {"fontproperties": fp},fontsize=12)
    ax1.set_xlabel("x-Achse",fontdict = {"fontproperties": fp},fontsize=12)
    ax1.set_ylabel("y-Achse",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) #Dateipfad
    fname, ext = os.path.splitext( os.path.basename(path) ) #Nur Dateiname
    
    plt.savefig(SAVEDIR+'/eps/'+fname+".eps") #eps speichern
    plt.savefig(SAVEDIR+fname+".svg") #Als svg für die EMK-Konvertierung speichern
    
    call_cmd='inkscape ' + SAVEDIR+fname + '.svg -M ' + SAVEDIR+'/emf/'+fname +'.emf'
    subprocess.call(call_cmd,shell=True)
    
    os.remove(SAVEDIR+fname+".svg") #Ich brauche kein SVG, also lösche es


def plot(path):

    #Wird von einem Überwachungsprogramm aufgerufen

    df=dataload(path) #Laden Sie Excel als Pandas-Datenrahmen
    graph(df) #Grafikzeichnung mit Matplotlib
    graph_save(path) #Speichern und konvertieren Sie Diagramme

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


das ist alles

Recommended Posts

Wenn eine Datei im freigegebenen Ordner von Raspberry Pi abgelegt wird, wird der Vorgang ausgeführt.
Rufen Sie den Speicherort der Datei ab, in der sich die Exe befindet, wenn Sie die von PyInstaller erstellte Exe ausführen
Verarbeiten Sie den Inhalt der Datei der Reihe nach mit einem Shell-Skript
Abrufen des Dateinamens in einem Ordner mithilfe von glob
Verarbeiten Sie die Dateien im Ordner in der Reihenfolge mit dem Shell-Skript
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Ändern Sie die Meldung, die beim Anmelden bei Raspberry Pi angezeigt wird
Gibt es ein Geheimnis in der Häufigkeit der Umfangszahlen?
Notieren Sie sich, was Sie in Zukunft mit Razpai machen möchten
Wenn sich eine Zeichenfolge einer bestimmten Reihe im Schlüssel des Wörterbuchs befindet, wird die Zeichenfolge in den Wert des Wörterbuchs konvertiert.
Schreiben Sie ein Skript in Shell und Python, um Sie in Slack zu benachrichtigen, wenn der Vorgang abgeschlossen ist
Unter Linux ist der Zeitstempel einer Datei etwas vorbei.
Auf jeden Fall bleibt das schnellste serielle Kommunikationsprotokoll in der Datei
Die Geschichte des "Lochs" in der Akte
[Python] Was tun, wenn beim Importieren aus dem zu sys.path hinzugefügten Verzeichnis gegen PEP8 verstoßen wird?
Anzeige der Signalstärke RSSI einer bestimmten SSID (Himbeer-Pi (Linux))
Was ist die XX-Datei im Stammverzeichnis eines beliebten Python-Projekts?
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
Deaktivieren Sie IPv6, wenn ssh von Raspeye 4 sehr langsam ist
Zeigen Sie den vollständigen Pfad (absoluten Pfad) einer Datei in einem Verzeichnis in Linux Bash an
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Implementieren Sie einen Teil des Prozesses in C ++
Wenn das Ziel Ubuntu 16.04 in Ansible ist
[Python] [Meta] Ist der Python-Typ ein Typ?
Ich habe ein Skript erstellt, um zu überprüfen, ob an der angegebenen Position der JSON-Datei in Python Englisch eingegeben wird.
Erklären Sie vorsichtig den Prozess der Erstellung einer einfachen Überwachungskamera ohne Server mithilfe von Raspeye, Gmail API und Line API
Verschiedene Möglichkeiten, die letzte Zeile einer CSV-Datei in Python zu lesen
Das Ausgabe-Timing ist falsch, wenn die Standardausgabe (Fehlerausgabe) in eine Datei in Python konvertiert wird
Unterschiede im Verhalten jeder LL-Sprache, wenn der Listenindex übersprungen wird
Vergessen Sie nicht, die Datei zu schließen, nur weil sie sich in einem temporären Ordner befindet
So erstellen Sie einen Raspberry Pi, der die Tweets eines bestimmten Benutzers spricht
[Python] Holen Sie sich die Dateien mit Python in den Ordner
Holen Sie sich den Aufrufer einer Funktion in Python
Kopieren Sie die Liste in Python
Finden Sie die Anzahl der Tage in einem Monat
Ausgabe in Form eines Python-Arrays
So legen Sie einen freigegebenen Ordner mit dem Host-Betriebssystem in CentOS7 auf Virtual BOX fest
[Lösung] Wenn "0001" in die Zeichenfolgenspalte in sqlite3 eingefügt wird, wird es als "1" eingegeben.
So zeigen Sie das Änderungsdatum einer Datei in C-Sprache bis zu Nanosekunden an
Verwirklichen Sie ein Super-IoT-Haus, indem Sie mit Raspberry Pi Sensordaten im Haus erfassen
Ein Hinweis, der einen Job in Python implementiert, der eine GCS-Datei in BigQuery lädt
[Raspberry Pi] Wenn der menschliche Sensor dies erkennt, speichern Sie den Zeitstempel in der Firebase-Echtzeitdatenbank.
Beim Lesen einer CSV-Datei mit read_csv von Pandas wird die erste Spalte zum Index
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
[Achtung] Beachten Sie beim Erstellen eines Binärbilds (1 Bit / Pixel) das Dateiformat!
Wenn eine lokale Variable mit demselben Namen wie die globale Variable in der Funktion definiert ist
Ich möchte über die Verbindungsumgebung benachrichtigt werden, wenn RaspberryPi eine Verbindung zum Netzwerk herstellt
Erstellen Sie eine Dox-Datei mit Miniaturansichten der Fotos im Ordner mit der Python-Python-Docx-Bibliothek und der kostenlosen Software "Nur Reduzierung".
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Dies ist ein Beispiel für eine Funktionsanwendung im Datenrahmen.
Wenn das ausgewählte Objekt in bpy.context.selected_objects nicht zurückgegeben wird
Ermitteln und verarbeiten Sie die Codierung der Textdatei automatisch
Seien Sie vorsichtig, wenn Sie die Eigenvektoren einer Matrix unterscheiden
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
Einbetten in datetime, wenn nur die Zeit bekannt ist
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit