python 3 与 python 2 中的 ConfigParser
ConfigParser in python 3 vs python 2
我一直在慢慢地从 py2 -> py3 过渡,我 运行 遇到了一个我无法完全解决的问题(虽然我确定问题是微不足道的)。当我执行下面的代码时,配置文件似乎没有任何部分:(
我哪里误入歧途了?
请注意,我确实从 python 2 脚本中重用了这段代码(用新的 configparser.ConfigParser 替换了旧的 ConfigParser.SafeConfigParser)。我不认为这个事实是相关的,但也许是?显然,我不知道:)
这是 project/main.py
import inspect
import os
import utilities.utilities
def main():
config_ini_path = os.path.abspath(inspect.getfile(inspect.currentframe()).split('.py')[0] + '_config.ini'
print(config_ini_path)
config = utilities.utilies.get_config(config_ini_path)
print(config.sections())
if __name__ == "__main__":
main()
这是 project/utilities/utilities.py:
import os
import configparser
import inspect
import sys
def get_config(config_file_path=os.path.abspath(inspect.getfile(inspect.currentframe()).split('.py')[0]) + '_config.ini'):
parser = configparser.ConfigParser()
if os.path.exists(config_file_path):
with open(config_file_path, 'r') as config_file:
parser.read(config_file)
return parser
else:
print('FAILED TO GET CONFIG')
sys.exit()
def set_config(parser, config_file_path):
if os.path.exists(config_file_path):
with open(config_file_path, 'w') as config_file:
parser.write(config_file)
else:
print('FAILED TO SET CONFIG')
sys.exit()
最后,这里是 project/project_config.ini:
[logging]
json_config_path = /project/logging.json
有趣的是,如果我添加
config['logging'] = {'json_config_path':'project/other.json'}
utilities.utilities.set_config(config, config_ini_path)
print(config.sections())
更改将被写入文件,但是,在重新执行时,它不会被召回(如 .sections() 所示)。
我确定我遗漏了一些简单的东西!是什么赋予了?
原来 .read()
接受文件名,.read_file()
接受文件类型。本来我用的是.readfp()
,但是py3里已经用read_file()
代替了!傻,傻我。
我一直在慢慢地从 py2 -> py3 过渡,我 运行 遇到了一个我无法完全解决的问题(虽然我确定问题是微不足道的)。当我执行下面的代码时,配置文件似乎没有任何部分:(
我哪里误入歧途了?
请注意,我确实从 python 2 脚本中重用了这段代码(用新的 configparser.ConfigParser 替换了旧的 ConfigParser.SafeConfigParser)。我不认为这个事实是相关的,但也许是?显然,我不知道:)
这是 project/main.py
import inspect
import os
import utilities.utilities
def main():
config_ini_path = os.path.abspath(inspect.getfile(inspect.currentframe()).split('.py')[0] + '_config.ini'
print(config_ini_path)
config = utilities.utilies.get_config(config_ini_path)
print(config.sections())
if __name__ == "__main__":
main()
这是 project/utilities/utilities.py:
import os
import configparser
import inspect
import sys
def get_config(config_file_path=os.path.abspath(inspect.getfile(inspect.currentframe()).split('.py')[0]) + '_config.ini'):
parser = configparser.ConfigParser()
if os.path.exists(config_file_path):
with open(config_file_path, 'r') as config_file:
parser.read(config_file)
return parser
else:
print('FAILED TO GET CONFIG')
sys.exit()
def set_config(parser, config_file_path):
if os.path.exists(config_file_path):
with open(config_file_path, 'w') as config_file:
parser.write(config_file)
else:
print('FAILED TO SET CONFIG')
sys.exit()
最后,这里是 project/project_config.ini:
[logging]
json_config_path = /project/logging.json
有趣的是,如果我添加
config['logging'] = {'json_config_path':'project/other.json'}
utilities.utilities.set_config(config, config_ini_path)
print(config.sections())
更改将被写入文件,但是,在重新执行时,它不会被召回(如 .sections() 所示)。
我确定我遗漏了一些简单的东西!是什么赋予了?
原来 .read()
接受文件名,.read_file()
接受文件类型。本来我用的是.readfp()
,但是py3里已经用read_file()
代替了!傻,傻我。