Python3中的ConfigParser与Python2的区别

5

我正在逐渐从Python2过渡到Python3,但遇到了一个问题,无法解决(尽管我相信这个问题很琐碎)。当我运行下面的代码时,配置文件似乎没有任何部分 :(

我偏离了哪里?

需要注意的是,我从Python 2脚本中复用了此代码(将旧的ConfigParser.SafeConfigParser替换为新的configparser.ConfigParser)。我不认为这一事实相关,但也许是?显然,我不知道 :)

以下是项目/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()

以下是项目/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_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() 所示)。

我相信我错过了一些简单的东西!是什么原因呢?


不要使用open(path)这个函数,而是应该使用parser.read()函数,可以这样使用:parser.read(path) - foxyblue
事实上,您正在重新创建“解析器”已经拥有的许多方法。例如,“set_config”与“parser.set()”相同。 - foxyblue
1
啊!这其实相当有帮助。原来.read()接受文件名,而read_file()接受文件类型。最初我使用的是.readfp(),但在py3中已被read_file()取代!我真是太傻了。感谢@GiantsLoveDeathMetal! - SolipsisticAltruist
很高兴我能够促成一个解决方案。 - foxyblue
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
2

原来.read()可以接受文件名,而.read_file()可以接受文件类型。最初,我使用的是.readfp(),但read_file()在py3中取代了它!我真是太傻了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,