我有一个python程序,只需要保存一行文本(计算机上特定文件夹的路径)。
我已经将它存储在一个文本文件中并从中读取;但是,我更喜欢一个解决方案,其中python文件是唯一的。
所以,我问:有没有办法在python程序中保存文本,即使它已经关闭,没有创建任何新文件?
编辑:我正在使用py2exe使程序成为.exe文件:也许该文件可以存储在那里,所以就好像没有文本文件一样?
答案 0 :(得分: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
值的更改都将是持久的。
我不一定会推荐这种自我修改代码作为良好实践,但我认为这可能是您正在寻找的。
答案 1 :(得分: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)
请注意,{3}中的_winreg
模块称为winreg
。
答案 2 :(得分:0)
为什么不把它放在代码的开头。例如。开始你的代码:
import ... #import statements should always go first
path = 'what you want to save'
现在你将路径保存为字符串