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

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

0
John Howard 22 Авг 2010 в 21:19

2 ответа

Лучший ответ

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

Чтобы «узнать, где ты»,

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

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

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

3
Alex Martelli 22 Авг 2010 в 17:24

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

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
0
Tony Veijalainen 22 Авг 2010 в 19:12