[英]Python ConfigParser cannot search .ini file correctly (Ubuntu 14, Python 3.4)
問題:代碼編譯正常,但是每當我調用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會在當前工作目錄 (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
)。
我再次運行它,但添加了修改
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
並且我發現這不是在存儲python“ read_db_config”的目錄中而是在調用此模塊的主python模塊的父目錄中創建的文件“ mysql_config.ini”。 我搜索了一下,找出了一個解決方案,使我可以將“ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.