Passdatei Informationen aus HTML-Datei-Selektor Eingang zu python und Bokeh

Ich versuche, eine einfache Bokeh-Server-Anwendung zu erstellen, die es einem Benutzer ermöglicht, eine Datei aus einer <input type="file"> file selection button zu laden. Die App wird dann die Daten aus der Datei, die der Benutzer ausgewählt hat, aufzeichnen. Der Code unten ist sehr einfach, und ich weiß einfach nicht, wie man die Datei Informationen aus dem Dateiauswahl zu python übergeben. Ich muss Python verwenden, um die Datei I / O und nicht html oder Javascript zu behandeln.

Ich kann es an die Arbeit gut machen, wenn ich bokeh serve --show example.py path/to/input_file an der Kommandozeile bokeh serve --show example.py path/to/input_file , aber ich möchte nicht, dass der Benutzer dies jedes Mal spezifiziert. Ich brauche sie, um auf eine Schaltfläche klicken zu können, um die Datei "hochzuladen". Diese Anwendung läuft lokal, also gibt es kein Hochladen auf einen Server oder so etwas.

Gibt es eine bessere Methode als <input type="file"> ?

 from bokeh.plotting import figure from bokeh.layouts import layout from bokeh.models import ColumnDataSource, Div from bokeh.io import curdoc desc = Div(text=""" <h1>A simple example</h1> <input type="file"> <br />""", width=800) # Create Column Data Source that will be used by the plot source = ColumnDataSource(data=dict(x=[], y=[])) p = figure(plot_height=550, plot_width=800, title="", toolbar_location='above') p.line(x="x", y="y", source=source) def update(): x_data,y_data = read_file_data(input_file_name) # function to read specific file type source.data = dict( x=x_data, y=y_data, ) sizing_mode = 'fixed' # 'scale_width' also looks nice with this example l = layout([ [desc], [p], ], sizing_mode=sizing_mode) update() curdoc().add_root(l) curdoc().title = "Sample" 

2 Solutions collect form web for “Passdatei Informationen aus HTML-Datei-Selektor Eingang zu python und Bokeh”

Ab Bokeh 0.12.4 gibt es kein eingebautes Dateiauswahl-Widget. Aber es ist möglich , neue Erweiterungen für Bokeh zu erstellen , die so nahtlos arbeiten wie die eingebauten Widgets, um JS-Events mit Python zu verbinden.

Der untenstehende Code ist eine super-grobe Implementierung eines Modells, das eine <input type="file"> umhüllt, um es an den Python-Code zu haken. Dieser Code sollte mit Bokeh 0.12.4 und neuer arbeiten.

 from bokeh.core.properties import String from bokeh.io import curdoc from bokeh.layouts import column from bokeh.models import Button, LayoutDOM IMPL = """ import * as p from "core/properties" import {LayoutDOM, LayoutDOMView} from "models/layouts/layout_dom" export class FileInputView extends LayoutDOMView initialize: (options) -> super(options) input = document.createElement("input") input.type = "file" input.onchange = () => @model.value = input.value @el.appendChild(input) export class FileInput extends LayoutDOM default_view: FileInputView type: "FileInput" @define { value: [ p.String ] } """ class FileInput(LayoutDOM): __implementation__ = IMPL value = String() input = FileInput() def upload(): print(input.value) button = Button(label="Upload") button.on_click(upload) curdoc().add_root(column(input, button)) 

Dies ergibt die Ausgabe unten:

Bildbeschreibung hier eingeben

Es gibt fast sicher Verbesserungen, die dazu gemacht werden könnten. So ist nicht wirklich ein guter Ort für iterative und kollaborative Diskussion, also wenn Sie Fragen haben, um dies zu verbessern, würde ich vorschlagen, die öffentliche Mailing-Liste als der beste Ort, um fortzufahren.

Ich habe die gleiche Aufgabe (Pass-Dateien auf Bokeh-Widget), aber mit einigen anderen Einschränkungen (Tornado mit eingebetteten Bokeh-Server). Also der Code unten ist nicht die genaue Lösung, aber es kann helfen:

Tornado HTTP Web-Seite mit eingebetteten Bokeh-Widget, das mit anderen Seiten der gleichen Anwendung kommuniziert https://gist.github.com/Sklavit/c378a18661f0d91918931eba5a1d7553

  • Wie kann ich ein neu gespeichertes Bild mit opencv aus Flask im statischen Ordner anzeigen?
  • Konvertieren Sie HTML in PDF mit Python
  • Localhost hat aufgehört zu aktualisieren, wenn verschiedene Flasche / Python-Skripte ausgeführt werden, wie kann ich das beheben?
  • Python BeautifulSoup kratzen Tische
  • Wie installiere ich schöne Suppe 4 mit Python 2.7 auf Fenstern
  • Webseite mit der CGI Python zur Hauptseite wechseln
  • Wie man eine Variable von href zu flasche
  • Python - Render HTML Inhalt zu GIF Bild
  • Entkommen html in python
  • Wie man Ruby / Python-Skripte von innen PHP übergeben und empfängt Parameter?
  • 'Forms.ContactForm object' hat kein Attribut 'hidden_tag'
  • Python ist die beste Programmiersprache der Welt.