我在加载和读取配置文件时遇到问题。当我运行imptest.py
文件时,Python读取configfile.cfg
并得到以下输出:
D:\tmp\test\dir1>python imptest.py
Section1
Section2
Section3
但是当我运行mainfile.py
文件时,没有任何反应,似乎Python没有读取configfile.cfg
文件:
D:\tmp\test>python mainfile.py
D:\tmp\test>
我的目录结构:
test/ dir1/ __init__.py imptest.py static/ configfile.cfg mainfile.py
mainfile.py
档案来源:
from dir1.imptest import run
if __name__ == '__main__':
run()
imptest.py
档案来源:
import configparser
def run():
config = configparser.ConfigParser()
config.read('../static/configfile.cfg', encoding='utf8')
for sections in config.sections():
print (sections)
if __name__ == '__main__':
run()
configfile.cfg
档案来源:
[Section1]
Foo = bar
Port = 8081
[Section2]
Bar = foo
Port = 8080
[Section3]
Test = 123
Port = 80
被修改
到目前为止,我的解决方案(绝对路径)是:
cwd = os.path.realpath(os.path.dirname(__file__) + os.path.sep + '..')
config.read(os.path.join(cwd,'static' + os.path.sep + 'configfile.cfg'), encoding='utf8')
@Yavar的解决方案是更好,更差还是更差?
答案 0 :(得分:3)
如果您想要imptest.py
的相对路径,请使用__file__
:
mydir = os.path.dirname(os.path.abspath(__file__))
new_path = os.path.join(mydir, '..', rest_of_the_path)
另外,请参阅此问题的答案: Difference between __file__ and sys.argv[0]
答案 1 :(得分:1)
它找不到您的配置文件,因为从主文件版本调用时没有使用正确的路径。
有趣的是,configparser默默地忽略了。看看这个:Python 3.2.3 (default, Sep 10 2012, 18:14:40)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import configparser
>>>
>>> config = configparser.ConfigParser()
>>> config.read('doesnotexist.cfg')
[]
>>> print(config.sections())
[]
>>>