2017-05-26 7 views
1

ich beim Lernen beginnen, wie in pythonanywhere zu arbeiten, damit ich ein paar Probleme habe ... Mein Web-App hat die Struktur:Struktur von Dateien in Kolben pythonanywhere Server?

/home/mentor/mysite/servidor/ here I've run.py and the folder app 

    inside app there's init.py , views.py and the folders: static,scripts,templates 

Mein Problem ist, dass innerhalb des Web eine Form gibt es und wenn jemand klickt auf die Schaltfläche Eine Funktion von Skripten wird in views.py aufgerufen. Diese Funktion muss eine .csv-Datei lesen (ich habe diese Datei in .../servidor/gespeichert).

Die Webseite wird jedoch nicht ausgeführt, sie gibt einen 500 Internal Server Error zurück, weil OSError: Datei b'Names.csv 'nicht existiert. Warum kann ich das lösen? Wo muss ich diese Datei ablegen? Ist das ein Problem mit der run.py oder WSGI Konfigurationsdatei?

Danke!

PD .: Der Code

in viwes.py:

from .scripts.file import function 

@app.route('/func', methods=['POST']) 
def resp(): 
    l=[request.form['d1'].....] 
    f=function(l) 
    ..... 

in file.py in Skriptordner:

import pandas as pd 
    def function(l): 
     df=pd.read_csv('Names.csv') #Here is the problem! 
     ..... 
+0

Können Sie den Code einschließen, der auf die Datei zugreift? –

+0

@Luis Orduz, ich schreibe es einfach auf, es ist okay? oder willst du mehr sehen? –

Antwort

0

Das Problem ist, dass das Verzeichnis von Python verwendet arbeiten Der Standardordner ist standardmäßig der Basisordner, daher muss der Pfad von dort sein.

Um darauf zuzugreifen, wenn Sie vom wsgi-Skript laufen, ist die sicherste Sache os. Versuchen:

import os 

# ... 

pd.read_csv(os.getcwd(), 'servidor', 'Names.csv') 

Sie auch das Arbeitsverzeichnis ändern könnten, in der Webkonsole von pythonanywhere, um das Projekt zu verweisen direkt ('servidor' in Ihrem Fall) und direkt Zugang ‚Names.csv‘ wieder.

+0

Danke für alle @Luis Orduz, aber es funktioniert nicht ... Ich habe auch versucht, Dateiordner auf andere zu ändern, aber es funktioniert auch nicht. Denken Sie, dass dies ein WSGI-Konfigurationsproblem ist? –

+0

Hallo, das ist wahrscheinlich zu spät, aber ich änderte die Antwort auf etwas, das für mich funktionierte. –

2

Sie können Dateien relativ zu den Python-Modulen öffnen, indem Sie __file__ verwenden.

import os 


def open_here(filename, encoding='UTF-8'): 
    """Open a file in the same directory as this module.""" 
    here = os.path.dirname(os.path.abspath(__file__)) 
    return open(os.path.join(here, filename), encoding=encoding) 


# example snippet 
def foo(): 
    with open_here('my_file') as f: