2016-05-05 2 views
0

Ich habe eine Textdatei mit Parametern für meinen Code, und ich möchte, dass diese Textdatei von meinem Python-Modul gelesen wird, wenn ich das neu lade Modul (oder führen Sie eine Funktion innerhalb). Die Idee ist, dass auf diese Weise jede Person, die den Code verwendet, ihre eigene Parameterdatei haben kann.Verwendung von imp.reload() und open(): Erzwinge das erneute Lesen einer Datei

Hier ist ein sehr vereinfachtes Beispiel für eine Textdatei, parameter.txt, mit zwei Linien:

--------- --------- parameter.txt

Redshift [zred]: 
6 

Und der Anfang des Codes:

--------- --------- test.py

import re 
import linecache as lc 

parameter =  open('parameter.txt','r') 
for i,line in enumerate(parameter): 
    if line.find('[zred]') >= 0: 
     zred = float(re.sub('\n','',lc.getline('parameter.txt',i+2))) 
print(zred) 

'Import-Test als t' gibt 6,0

Nun, wenn ich die 6 in parameter.txt zu einem 8 ändern:

'reload (t)' noch 6.0 gibt!

Wie kann ich den 'Öffnen'-Befehl erzwingen, wenn ich das Modul neu lade?

+0

Sind auf Python 3? Ich denke, dass 'imp.reload()' wahrscheinlich nicht das tut, was du denkst. Die 3.5 Dokumentation gibt: "* Veraltet seit Version 3.4: Verwenden Sie stattdessen importlib.reload()." – cdarke

+0

oh thx, nein, ich bin am 2.7 – Karen

Antwort

1

Oh, warte! Ich denke, ich habe eine Lösung gefunden. Ich musste den Cache von Linecache löschen, bevor ich ihn benutzte, um Zeilen aus der gleichen Textdatei zu bekommen ... hinterhältig. So das Hinzufügen, im Grunde diese Zeile vor der Schleife:

lc.clearcache() 

siehe the docs on linecache

Verwandte Themen