0

我有一个 python 程序,只需要保存一行文本(计算机上特定文件夹的路径)。

我已经将其存储在文本文件中并从中读取;但是,我更喜欢只有 python 文件的解决方案。

所以,我问:有没有办法在python程序中保存文本,即使在它关闭之后,也不会创建任何新文件?

编辑:之后我使用 py2exe 使程序成为 .exe 文件:也许该文件可以存储在那里,所以就好像没有文本文件一样?

4

3 回答 3

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将是持久的。

我不一定会推荐这种自我修改代码作为良好实践,但我认为这可能是您正在寻找的。

于 2013-07-15T01:29:43.993 回答
2

似乎您想要做的事情最好使用Windows 注册表来解决- 我假设既然您提到您将从脚本创建一个 exe。

下面的代码片段尝试从注册表中读取一个字符串,如果它没有找到它(例如当程序第一次启动时),它将创建这个字符串。没有文件,没有混乱......除了会有一个注册表项。如果您从计算机中删除该软件,您还应该从注册表中删除该密钥。还要确保将MyCompanyandMyProgramMy 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 中调用的。

于 2013-07-15T03:05:45.507 回答
0

你为什么不把它放在代码的开头。例如开始你的代码:

import ... #import statements should always go first

path = 'what you want to save'

现在您将路径保存为字符串

于 2013-07-15T01:20:34.647 回答