2016-10-30 3 views
2

Возможно ли читать пути из внешнего файла cfg (конфигурация).Возможно ли прочитать переменную из файла 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.

ответ

1

self.config.get('direccion','enlace') i nstead из 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+ 

Испытано это и его работает.

+0

работал! благодаря! –

1

поддержка парсера конфигурации для чтения каталогов.

некоторые примеры: https://wiki.python.org/moin/ConfigParserExamples

обновленный CFG файл (я удалил 'г +' из файла конфигурации)

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')) 
Смежные вопросы