2016-03-21 7 views
1

Ich habe eine Funktion einige Spektrometerdaten unpickle, hier in extremer Kürze wiedergegeben:Python-Funktion ungültig Syntaxfehler werfen

def loader(filename): 
    global lister 
    lister = pd.read_pickle(str(filename) + ".pkl") 

Die Funktion arbeitet wie ich es mag, mit der Ausnahme, dass ich lieber nur Tab/Vervollständigen Sie den Dateinamen, anstatt die Dateierweiterung rückgängig zu machen. Ich bin mir nicht sicher, warum ich den Dateinamen (20160321.pkl) nicht einfach in die Funktion selbst schreiben kann. Ich kann Strings erstellen, die als '20160321.pkl' angezeigt werden, aber warum kann ich keine Zeichenketten des Dateinamens mit Tabulatoren machen, der die Erweiterung enthält, wie im Folgenden?

Ich bin sicher, dass es einen einfachen Grund dafür gibt, den ich noch nicht gelernt habe.

+0

Wie rufen Sie die Funktion auf? –

+0

normalerweise in einem Interpreter: Loader (20160321) funktioniert, wie ich später die .pkl hinzufügen. Loader (20160321.pkl) funktioniert nicht – user8307

+0

Ich bin mir nicht sicher, ob ich die Frage verstehe - nennen Sie es mit 'loader (" 20160321 ")'? Ist Ihre Frage, wie Sie den Dateinamen automatisch berechnen/zusammenstellen, ohne selbst die Datumszeichenfolge übergeben zu müssen? –

Antwort

0

Wenn Sie loader(20160321) aufrufen, geben Sie tatsächlich eine Ganzzahl (20160321) ein, keine Zeichenfolge. Aus diesem Grund funktioniert der erste Ansatz, weil str(filename) diese ganze Zahl in eine Zeichenfolge konvertiert und dann am Ende ".pkl" hinzufügt.

Wenn Sie loader(20160321.pkl) sind rufen Sie einen Syntaxfehler sind immer da eine Zahl mit einem Komma in es haben kann, aber nicht mit Zeichen nach, dass (so wird 3.5 erlaubt aber 3.abc nicht erlaubt ist).

Wenn Sie es mit der Erweiterung aufrufen möchten, müssen Sie eine Zeichenfolge übergeben: loader("20160321.pkl"). Sie können auch einfache Anführungszeichen verwenden (loader('20160321.pkl')), aber auf jeden Fall möchten Sie eine Zeichenfolge übergeben.

+0

Ich dachte, es wäre so einfach. Ich hatte gehofft, ein paar Tastenanschläge zu speichern, aber es sieht so aus, als wären beide gleichwertig. Vielen Dank; Ich werde deine Antwort akzeptieren. – user8307