2013-07-15 2 views
0

У меня есть программа python, которая просто должна сохранить одну строку текста (путь к определенной папке на компьютере).Сохранение данных в Python без текстового файла?

У меня есть работа, чтобы сохранить его в текстовом файле и прочитать его; однако я бы предпочел решение, в котором файл python является единственным.

И вот, я спрашиваю: есть ли способ сохранить текст в программе python даже после его закрытия, без создания каких-либо новых файлов?

EDIT: Я использую py2exe для создания программы .exe-файла после этого: возможно, файл может быть сохранен там, и поэтому, как будто нет текстового файла?

ответ

2

Кажется, что то, что вы хотите сделать, лучше решить, используя Windows Registry. Я предполагаю, что, поскольку вы упомянули, что будете создавать exe из своего скрипта.

Этот следующий фрагмент пытается прочитать строку из реестра и если она не находит ее (например, когда программа запускается в первый раз), она создаст эту строку. Нет файлов, нет беспорядков ... кроме того, что будет запись в реестре. Если вы удалите программное обеспечение с компьютера, вы также должны удалить ключ из реестра. Также обязательно измените обозначения MyCompany и MyProgram и My String на что-то более содержательное.

Подробнее см. В Python _winreg API.

import _winreg as wr 

key_location = r'Software\MyCompany\MyProgram' 
try: 
    key = wr.OpenKey(wr.HKEY_CURRENT_USER, key_location, 0, wr.KEY_ALL_ACCESS) 
    value = wr.QueryValueEx(key, 'My String') 
    print('Found value:', value) 
except: 
    print('Creating value.') 
    key = wr.CreateKey(wr.HKEY_CURRENT_USER, key_location) 
    wr.SetValueEx(key, 'My String', 0, wr.REG_SZ, 'This is what I want to save!') 
wr.CloseKey(key) 

Обратите внимание, что _winreg модуль называется winreg в Python 3.

+0

+1: Хороший вариант, если вы знаете, что скрипт будет работать в Windows, как представляется, для этого вопроса. – Simon

0

Почему бы вам просто не поставить его в начале кода. Например. начать свой код:

import ... #import statements should always go first 

path = 'what you want to save' 

И теперь вы путь сохранить в виде строки

+0

Импорт откуда? – Cisplatin

+0

заявление об импорте не имеет к этому никакого отношения. Все, что я говорю, это то, что если вы импортируете некоторую библиотеку в свой код, вы должны начать с этого – enderx1x

+1

, но это не было бы настойчивым. «путь» будет сбрасываться до того же значения каждый раз при запуске скрипта. – astrognocci

4

Вы можете сохранить имя файла в сценарии Python и изменить его в самом сценарии, если вам нравится. Например:

import re,sys 

savefile = "widget.txt" 
x = input("Save file name?:") 
lines = list(open(sys.argv[0])) 
out = open(sys.argv[0],"w") 
for line in lines: 
    if re.match("^savefile",line): 
     line = 'savefile = "' + x + '"\n' 
    out.write(line) 

Этот скрипт считывает себя в списке, открывает себя снова для записи и вносит изменения в строку, в которой savefile установлен. Каждый раз, когда скрипт запускается, изменение значения savefile будет постоянным.

Я бы не стал рекомендовать этот самосовершенствующий код как хорошую практику, но я думаю, что это может быть то, что вы ищете.

+0

Такой хак и заставляет меня съеживаться так плохо. Тем не менее, это такой элегантный хак, что он заслуживает +1 – inspectorG4dget

+0

, который я вижу из вашего отредактированного вопроса, что вы используете 'py2exe'. Это решение не будет работать в этом случае в его нынешнем виде. Настройка исполняемого файла так, чтобы он был успешно самомодифицирован, но намного сложнее, чем при использовании простого сценария Python. – Simon

Смежные вопросы