Файл свойств в Python (похож на свойства Java) - PullRequest
118 голосов
/ 29 августа 2010

Учитывая следующий формат ( .properties или .ini ):

propertyName1=propertyValue1
propertyName2=propertyValue2
...
propertyNameN=propertyValueN

Для Java есть Свойства класс, который предлагает функциональность для анализа / взаимодействия с вышеуказанным форматом.

Есть ли что-то похожее в python s standard library (2.x)?

Если нет, какие у меня есть альтернативы?

Ответы [ 23 ]

0 голосов
/ 11 июня 2015

Я сделал это с помощью ConfigParser следующим образом. Код предполагает, что в том же каталоге, где находится BaseTest, находится файл config.prop:

config.prop

[CredentialSection]
app.name=MyAppName

BaseTest.py:

import unittest
import ConfigParser

class BaseTest(unittest.TestCase):
    def setUp(self):
        __SECTION = 'CredentialSection'
        config = ConfigParser.ConfigParser()
        config.readfp(open('config.prop'))
        self.__app_name = config.get(__SECTION, 'app.name')

    def test1(self):
        print self.__app_name % This should print: MyAppName
0 голосов
/ 02 мая 2018

Lightbend выпустил библиотеку Typesafe Config , которая анализирует файлы свойств, а также некоторые расширения на основе JSON.Библиотека Lightbend предназначена только для JVM, но, похоже, получила широкое распространение, и теперь есть порты на многих языках, включая Python: https://github.com/chimpler/pyhocon

0 голосов
/ 01 сентября 2016

Это то, что я написал для синтаксического анализа файла и установки его в качестве переменных env, которые пропускают комментарии и неключевые строки значений, добавляют переключатели для указания использования печати hg: d

  • -h или --helpsummary
  • -c Укажите char, который идентифицирует комментарий
  • -s Разделитель между ключом и значением в файле prop
  • и укажите файл свойств, который необходимо проанализировать, например:python EnvParamSet.py -c # -s = env.properties

    import pipes
    import sys , getopt
    import os.path
    
    class Parsing :
    
            def __init__(self , seprator , commentChar , propFile):
            self.seprator = seprator
            self.commentChar = commentChar
            self.propFile  = propFile
    
        def  parseProp(self):
            prop = open(self.propFile,'rU')
            for line in prop :
                if line.startswith(self.commentChar)==False and  line.find(self.seprator) != -1  :
                    keyValue = line.split(self.seprator)
                    key =  keyValue[0].strip() 
                    value = keyValue[1].strip() 
                            print("export  %s=%s" % (str (key),pipes.quote(str(value))))
    
    
    
    
    class EnvParamSet:
    
        def main (argv):
    
            seprator = '='
            comment =  '#'
    
            if len(argv)  is 0:
                print "Please Specify properties file to be parsed "
                sys.exit()
            propFile=argv[-1] 
    
    
            try :
                opts, args = getopt.getopt(argv, "hs:c:f:", ["help", "seprator=","comment=", "file="])
            except getopt.GetoptError,e:
                print str(e)
                print " possible  arguments  -s <key value sperator > -c < comment char >    <file> \n  Try -h or --help "
                sys.exit(2)
    
    
            if os.path.isfile(args[0])==False:
                print "File doesnt exist "
                sys.exit()
    
    
            for opt , arg  in opts :
                if opt in ("-h" , "--help"):
                    print " hg:d  \n -h or --help print usage summary \n -c Specify char that idetifes comment  \n -s Sperator between key and value in prop file \n  specify file  "
                    sys.exit()
                elif opt in ("-s" , "--seprator"):
                    seprator = arg 
                elif opt in ("-c"  , "--comment"):
                    comment  = arg
    
            p = Parsing( seprator, comment , propFile)
            p.parseProp()
    
        if __name__ == "__main__":
                main(sys.argv[1:])
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...