2010-08-22 4 views
0

Я делаю программу python, и я хочу проверить, является ли это первым при запуске программы (firstTime == True). Однако после его запуска я хочу навсегда изменить firstTime на False. (Есть и другие переменные, которые я хочу взять на вход для этого, останется, если это первый запуск, но это должно быть разрешено одинаково).Сохранять пользовательские данные после ввода

Есть ли лучший способ, чтобы просто прочитать из файла, который содержит данные? Если нет, как я могу найти, откуда выполняется файл (так что данные будут в одном каталоге)?

+3

В стороне, 'if x == True:' или 'if x == False:' всегда неверны. Вы хотите 'if x:' или 'if not x:' соответственно. – habnabit

ответ

3

Если вы хотите сохранить данные, это будет «в конечном итоге» для файлов на диске (хотя могут быть промежуточные шаги, например, через сеть или систему баз данных, в конце концов, если данные должны быть постоянными, это будет где-то на диске файлы).

Чтобы «выяснить, где вы»,

import os 
print os.path.dirname(os.path.abspath(__file__)) 

Есть варианты, но это основная идея. __file__ в любом скрипте или модуле .py дает путь к файлу, в котором находится этот файл (не будет работать в интерактивной командной строке, конечно, поскольку в нем нет файла; ;-).

os.path модуля в стандартной библиотеке Python имеет много полезных функций для манипулирования строк пути - здесь мы используем два: abspath дать абсолютную (не относительной) версию пути файла, так что вы не имеете заботиться о том, каков ваш текущий рабочий каталог; и dirname, чтобы извлечь только имя каталога (фактически, весь путь к каталогу ;-) и отбросить имя файла (вам не важно, является ли имя модуля foo.py или bar.py, только в каком каталоге это ;-).

0

Достаточно просто создать файл в том же каталоге, если программа запускается в первый раз (конечно, что файл может быть удален, чтобы сделать материал для первого запуска снова, но это может быть иногда ПОЛЕЗНЫЕ):

firstrunfile = 'config.dat' 
if not os.path.exists(firstrunfile): 
    ## configuration here 
    open(firstrunfile,'w').close() ## .write(configuration) 
    print 'First run' 
    firstTime == True 
else: 
    print 'Not first run' 
    ## read configuration 
    firstTime == False