gpt4 book ai didi

python - Windows 上的配置文件位置/在 %APPDATA% 中创建目录

转载 作者:行者123 更新时间:2023-12-01 05:52:49 26 4
gpt4 key购买 nike

我正在编写一个应用程序,其中包含与 ConfigParser 模块一起使用的配置文件。该配置文件实际上存储在 %APPDATA%/PressLogReader/PressLogReader.conf 中。

但问题是 %APPDATA%/PressLogReader (和配置文件)在应用程序首次启动时不存在,因此应用程序崩溃了。

也许我可以在安装应用程序时创建 %APPDATA%/PressLogReader 文件夹,但我认为这是一个糟糕的解决方案。

你有更好的解决方案吗?

这是我的 session 课:

APP_DIRNAME = 'PressLogReader'

if 'APPDATA' in os.environ:
APP_CONFIG_PATH = os.path.join(os.environ['APPDATA'], APP_DIRNAME)
elif 'XDG_CONFIG_HOME' in os.environ:
APP_CONFIG_PATH = os.path.join(os.environ['XDG_CONFIG_HOME'], APP_DIRNAME)
else:
APP_CONFIG_PATH = os.path.join(os.environ['HOME'], '.config', APP_DIRNAME)

APP_CONF_FILE = os.path.join(APP_CONFIG_PATH, 'PressLogReader.conf')

class Config :

def __init__(self) :
self.parser = ConfigParser.ConfigParser()

params = {
'logFile': 'C:\Program Files\syslog\log\messages',
'filterByIP': False,
'IpFilter': ''
}

if not os.access(APP_CONF_FILE, os.F_OK | os.W_OK) :
self.parser.add_section('general')
for arg in params:
self.parser.set('general', arg, params[arg])
self.write()

self.parser.read(APP_CONF_FILE)
self.getLogFile()
self.getFilterByIp()
self.getIpFilter()

def write(self) :
with open(APP_CONF_FILE, 'wb') as conf_file:
self.parser.write(conf_file)

def getLogFile(self) :
try :
self.log_file = self.parser.get('general', 'logFile')
except ConfigParser.NoSectionError :
self.parser.add_section('general')
self.parser.set('general', 'logFile', params['logFile'])
except ConfigParser.NoOptionError :
self.parser.set('general', 'logFile', params['logFile'])
finally :
self.log_file = params['logFile']

def getFilterByIp(self) :
try :
self.filter_by_ip = self.parser.getboolean('general', 'filterByIP')
except ConfigParser.NoSectionError :
self.parser.add_section('general')
self.parser.set('general', 'filterByIP', params['filterByIP'])
except ConfigParser.NoOptionError :
self.parser.set('general', 'filterByIP', params['filterByIP'])
finally :
self.filter_by_ip = params['filterByIP']

def getIpFilter(self) :
try :
self.ip_filter = self.parser.get('general', 'IpFilter')
except ConfigParser.NoSectionError :
self.parser.add_section('general')
self.parser.set('general', 'IpFilter', params['IpFilter'])
except ConfigParser.NoOptionError :
self.parser.set('general', 'IpFilter', params['IpFilter'])
finally :
self.ip_filter = params['IpFilter']

最佳答案

此代码片段将检查 PressLogReader 是否文件存在于 os.environ 中与 key APPDATA 关联的文件夹中:

APP_DIRNAME = 'PressLogReader'

if not os.path.exists(os.path.join(os.environ['APPDATA'],APP_DIRNAME)):
os.mkdir(os.path.join(os.environ['APPDATA'],APP_DIRNAME))

您可以通过重新设计它来扩展它,以便它在创建新文件夹之前检查您的配置文件可能放置的每个位置(如果您愿意)。解决方案的核心内容是相同的,因此留给读者作为练习。

顺便说一句,这是我们的配置文件 - 为什么您需要担心它位于多个位置?您是否有遗留代码需要将其放置在其他地方,或者这可能是为了跨平台?

编辑:

您还可以使用os.path.exists(file_path)检查系统上是否存在文件。因此,也许而不是检查 os.path.exists(os.path.join(os.environ['APPDATA'], APP_DIRNAME))你可以检查os.path.exists(os.path.join(os.environ['APPDATA'], APP_DIRNAME, 'PressLogReader.conf'))在您需要检查的每个目录中。

关于python - Windows 上的配置文件位置/在 %APPDATA% 中创建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584992/

26 4 0
文章推荐: python - 从BOM发现编码的函数
文章推荐: java - 使用 OData4J 检索 OData 数据时出错
文章推荐: jquery - 在 内获取 #document 内的元素