Python ConfigParser не может правильно искать INI-файл (Ubuntu 14, Python 3.4)

1

Проблема: Код компилируется отлично, но когда я вызываю функцию read_db_config, я получаю "Исключение: mysql не найден в файле mysql_config.ini"

Файл находится в том же каталоге, но главный script запускает два каталога с помощью

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
Теги:

2 ответа

1
Лучший ответ

если вы используете относительные пути для имен файлов или каталогов, python будет искать их (или создавать) в вашем текущем рабочем каталоге (переменная $PWD в bash).

если вы хотите, чтобы они относились к текущему файлу 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 находится в каталоге etc ниже вашего python script.

вы, конечно, всегда можете использовать абсолютные пути (начиная с /, т.е. /home/someuser/mysql_config.ini).

  • 0
    Спасибо, это сделает его намного чище
0

Я запустил его снова, но с модификацией добавления

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, который вызывает этот модуль. Я немного искал его и выяснил решение perment, которое позволяет мне хранить "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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню