【问题标题】:Python ConfigParser cannot search .ini file correctly (Ubuntu 14, Python 3.4)Python ConfigParser 无法正确搜索 .ini 文件(Ubuntu 14、Python 3.4)
【发布时间】:2015-06-03 13:15:56
【问题描述】:

问题: 代码编译得很好,但是当我调用 read_db_config 函数时,我得到“异常:在 mysql_config.ini 文件中找不到 mysql”

该文件在同一个目录中,但主脚本使用

运行两个目录
import sys 
from Config.MySQL.python_mysql_dbconfig import read_db_config

我是 python 新手,到处搜索,但我似乎无法确定我的问题

代码:

from ConfigParser import ConfigParser

def read_db_config(filename='mysql_config.ini', section='mysql'):

    # create parser and read ini configuration file
    parser = ConfigParser()
    parser.read(filename)

    # get section, default to mysql
    db = {}
    if parser.has_section(section):
        items = parser.items(section)
        for item in items:
            db[item[0]] = item[1]
    else:
        raise Exception('{0} not found in the {1}  file'.format(section, filename))

    return db

mysql_config.ini:

[mysql]
database = testdba
user = root
password = test
unix_socket = /opt/lampp/var/mysql/mysql.sock

【问题讨论】:

    标签: python


    【解决方案1】:

    如果您使用 相对路径 作为文件名或目录名,python 将在您的 当前工作目录(bash 中的 $PWD 变量)中查找(或创建)它们)。

    如果你想让它们相对于当前的 python 文件,你可以使用 (python 3.4)

    from pathlib import Path
    HERE = Path(__file__).parent.resolve()
    CONFIG_PATH = HERE / '../etc/mysql_config.ini'
    

    或(python 2.7)

    import os.path
    HERE = os.path.abspath(os.path.dirname(__file__))
    CONFIG_PATH = os.path.join(HERE, '../etc/mysql_config.ini')
    

    如果您的 mysql_config.ini 文件位于 python 脚本下方的 etc 目录中。

    您当然可以始终使用绝对路径(以/ 开头;即/home/someuser/mysql_config.ini)。

    【讨论】:

    • 谢谢,这会让它更干净
    【解决方案2】:

    我再次运行它,但添加了修改

    parser = configparser.ConfigParser()
    parser['mysql'] = {'database': 'testdba',
                       'user' : 'root',
                       'password' : 'test',
                       'unix_socket' : '/opt/lampp/var/mysql/mysql.sock'}
    with open('mysql_config.ini', 'w') as configfile:
    parser.write(configfile
    

    我发现这创建的文件“mysql_config.ini”不是在存储python“read_db_config”的目录中,而是在调用该模块的主python模块的父目录中。我搜索了一下并找到了一个永久解决方案,让我将“mysql_config.ini”保留在我希望的位置。

    import configparser 
    
    def read_db_config(dirname = '/opt/Python_MySQL_Email_Receipt_Client/Config/MySQL/', filename='mysql_config.ini', section='mysql'):
    
    # create parser and read ini configuration file
    
    parser = configparser.ConfigParser()
    parser.read(dirname + filename)
    
    # get section, default to mysql
    db = {}
    if parser.has_section(section):
        items = parser.items(section)
        for item in items:
            db[item[0]] = item[1]
    else:
        raise Exception('{0} not found in the {1} file'.format(section, filename))
    
    return db
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 2015-03-13
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 2021-09-29
      • 2016-09-12
      相关资源
      最近更新 更多