是否可以从外部cfg
(配置)文件中读取路径。
我正在创建一个打开文件的应用程序。目前我必须多次复制和粘贴路径。我想在我的cfg
文件中编写路径并从我的Python程序中调用它。
这是我的Python文件:
import ConfigParser
import os
class Messaging(object):
def __init__(self):
self.config = ConfigParser.RawConfigParser()
self.rutaExterna = os.path.join(os.getcwd(), "app/properties.cfg")
self.config.read(['properties.cfg', self.rutaExterna])
def net(self):
# with open('/etc/network/interfaces', 'r+') as f:
direccion = self.config.read('direccion', 'enlace')
with open('direccion') as f:
for line in f:
found_network = line.find('network')
if found_network != -1:
network = line[found_network+len('network:'):]
print ('network: '), network
return network
CFG档案:
[direccion]
enlace = '/etc/network/interfaces', 'r+'
我想将文件路径存储在cfg
文件中的变量中。
然后我可以在我的Python文件中使用该变量打开该文件。
答案 0 :(得分:1)
配置解析器支持读取目录。
一些例子: https://wiki.python.org/moin/ConfigParserExamples
更新了CFG文件(我已从配置文件中删除了' r +')
CFG档案:
[direccion]
enlace = '/etc/network/interfaces'
更新了Python代码:
try:
from configparser import ConfigParser # python ver. < 3.0
except ImportError:
from ConfigParser import ConfigParser # ver. > 3.0
# instantiate
config = ConfigParser()
cfg_dir = config.get('direccion', 'enlace')
# Note: sometimes you might want to use os.path.join
cfg_dir = os.path.join(config.get('direccion', 'enlace'))
答案 1 :(得分:1)
使用self.config.get('direccion','enlace')
代替self.config.read('direccion', 'enlace')
然后您可以split()
和strip()
字符串并将其作为参数传递给open()
:
import ConfigParser
import os
class Messaging(object):
def __init__(self):
self.config = ConfigParser.RawConfigParser()
self.rutaExterna = os.path.join(os.getcwd(), "app/properties.cfg")
self.config.read(['properties.cfg', self.rutaExterna])
def net(self):
direccion = self.config.get('direccion','enlace')
direccion = map(str.strip,direccion.split(','))
with open(*direccion) as f:
for line in f:
found_network = line.find('network')
if found_network != -1:
network = line[found_network+len('network:'):]
print ('network: '), network
return network
msg = Messaging()
msg.net()
您的配置文件中也不需要'
:
[direccion]
enlace = /etc/network/interfaces, r+
测试过这个并且它有效。