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

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

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

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

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

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

Ответы [ 23 ]

2 голосов
/ 12 декабря 2012

Это то, что я делаю в своем проекте: я просто создаю другой файл .py с именем properties.py, который включает в себя все общие переменные / свойства, которые я использовал в проекте, и в любом файле нужно ссылаться на эти переменные, помещая

from properties import *(or anything you need)

Использовал этот метод, чтобы сохранить спокойствие в SVN, когда я часто менял расположение разработчиков, и некоторые общие переменные были относительно локальной среды. Хорошо работает для меня, но не уверен, что этот метод будет предложен для формальной среды разработки и т. Д.

2 голосов
/ 30 июня 2011

Это является заменой java.util один на один. Свойства

Из документа:

  def __parse(self, lines):
        """ Parse a list of lines and create
        an internal property dictionary """

        # Every line in the file must consist of either a comment
        # or a key-value pair. A key-value pair is a line consisting
        # of a key which is a combination of non-white space characters
        # The separator character between key-value pairs is a '=',
        # ':' or a whitespace character not including the newline.
        # If the '=' or ':' characters are found, in the line, even
        # keys containing whitespace chars are allowed.

        # A line with only a key according to the rules above is also
        # fine. In such case, the value is considered as the empty string.
        # In order to include characters '=' or ':' in a key or value,
        # they have to be properly escaped using the backslash character.

        # Some examples of valid key-value pairs:
        #
        # key     value
        # key=value
        # key:value
        # key     value1,value2,value3
        # key     value1,value2,value3 \
        #         value4, value5
        # key
        # This key= this value
        # key = value1 value2 value3

        # Any line that starts with a '#' is considerered a comment
        # and skipped. Also any trailing or preceding whitespaces
        # are removed from the key/value.

        # This is a line parser. It parses the
        # contents like by line.
2 голосов
/ 17 января 2017

Если вам нужно просто прочитать все значения из раздела в файле свойств:

Ваше config.properties расположение файла:

[SECTION_NAME]  
key1 = value1  
key2 = value2  

Ваш код:

   import configparser

   config = configparser.RawConfigParser()
   config.read('path_to_config.properties file')

   details_dict = dict(config.items('SECTION_NAME'))

Это даст вам словарь, в котором ключи такие же, как в конфигурационном файле, и соответствующие им значения.

details_dict:

{'key1':'value1', 'key2':'value2'}

Теперь, чтобы получить значение ключа key1: details_dict['key1']

Помещение всего этого в метод, который читает этот раздел из файла конфигурации только один раз.(при первом вызове метода во время выполнения программы).

def get_config_dict():
    if not hasattr(get_config_dict, 'config_dict'):
        get_config_dict.config_dict = dict(config.items('SECTION_NAME'))
    return get_config_dict.config_dict

Теперь вызовите вышеуказанную функцию и получите требуемое значение ключа:

config_details = get_config_dict()
key_1_value = config_details['key1'] 

-------------------------------------------------------------

Расширение упомянутого выше подхода, автоматическое чтение раздела за разделом, а затем доступ по имени раздела и имени ключа.

def get_config_section():
    if not hasattr(get_config_section, 'section_dict'):
        get_config_section.section_dict = dict()

        for section in config.sections():
            get_config_section.section_dict[section] = 
                             dict(config.items(section))

    return get_config_section.section_dict

Для доступа:

config_dict = get_config_section()

port = config_dict['DB']['port'] 

(здесь «DB» - это имя раздела в файле конфигурации, а «порт» - это ключ в разделе «DB».)

1 голос
/ 18 июня 2019

создайте словарь в вашем модуле Python и сохраните все в нем и получите к нему доступ, например:

dict = {
       'portalPath' : 'www.xyx.com',
       'elementID': 'submit'}

Теперь для доступа к нему вы можете просто сделать:

submitButton = driver.find_element_by_id(dict['elementID'])
1 голос
/ 27 июля 2017

Ниже 2 строк кода показано, как использовать Python List Compreatsion для загрузки файла свойств 'java style'.

split_properties=[line.split("=") for line in open('/<path_to_property_file>)]
properties={key: value for key,value in split_properties }

Пожалуйста, ознакомьтесь с подробностями ниже. https://ilearnonlinesite.wordpress.com/2017/07/24/reading-property-file-in-python-using-comprehension-and-generators/

1 голос
/ 02 июня 2016
import json
f=open('test.json')
x=json.load(f)
f.close()
print(x)

Содержимое test.json: {"host": "127.0.0.1", "user": "jms"}

0 голосов
/ 24 февраля 2019

Я следовал подходу configparser, и он работал довольно хорошо для меня.Создал один файл PropertyReader и использовал там парсер конфигурации для свойства ready, соответствующего каждому разделу.

** Используется Python 2.7

Содержимое файла PropertyReader.py:

#!/usr/bin/python
import ConfigParser

class PropertyReader:

def readProperty(self, strSection, strKey):
    config = ConfigParser.RawConfigParser()
    config.read('ConfigFile.properties')
    strValue = config.get(strSection,strKey);
    print "Value captured for "+strKey+" :"+strValue
    return strValue

Содержимое файла схемы чтения:

from PropertyReader import *

class ReadSchema:

print PropertyReader().readProperty('source1_section','source_name1')
print PropertyReader().readProperty('source2_section','sn2_sc1_tb')

Содержимое файла .properties:

[source1_section]
source_name1:module1
sn1_schema:schema1,schema2,schema3
sn1_sc1_tb:employee,department,location
sn1_sc2_tb:student,college,country

[source2_section]
source_name1:module2
sn2_schema:schema4,schema5,schema6
sn2_sc1_tb:employee,department,location
sn2_sc2_tb:student,college,country
0 голосов
/ 13 февраля 2019

Я использовал это, эта библиотека очень полезна

from pyjavaproperties import Properties
p = Properties()
p.load(open('test.properties'))
p.list()
print(p)
print(p.items())
print(p['name3'])
p['name3'] = 'changed = value'
0 голосов
/ 13 февраля 2019

это работает для меня.

from pyjavaproperties import Properties
p = Properties()
p.load(open('test.properties'))
p.list()
print p
print p.items()
print p['name3']
0 голосов
/ 01 ноября 2018

Вы можете использовать следующую функцию, которая является измененным кодом @mvallebr. Он учитывает комментарии файла свойств, игнорирует пустые новые строки и позволяет получить одно значение ключа.

def getProperties(propertiesFile ="/home/memin/.config/customMemin/conf.properties", key=''):
    """
    Reads a .properties file and returns the key value pairs as dictionary.
    if key value is specified, then it will return its value alone.
    """
    with open(propertiesFile) as f:
        l = [line.strip().split("=") for line in f.readlines() if not line.startswith('#') and line.strip()]
        d = {key.strip(): value.strip() for key, value in l}

        if key:
            return d[key]
        else:
            return d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...