[python] Python의 특성 파일 (Java 특성과 유사)
다음과 같은 형식 ( .properties 또는 .ini )이 제공됩니다.
propertyName1=propertyValue1
propertyName2=propertyValue2
...
propertyNameN=propertyValueN
를 들어 자바 이 속성 클래스는 그 위의 형식과 구문 분석 / 상호 작용에 제공 기능.
파이썬 의 표준 라이브러리 (2.x)에 비슷한 것이 있습니까?
그렇지 않은 경우 다른 대안이 있습니까?
답변
.ini 파일의 경우 .ini 파일 과 호환되는 형식을 제공하는 ConfigParser 모듈이 있습니다.
어쨌든 완전한 .properties 파일을 구문 분석하는 데 사용할 수있는 것은 없습니다.
답변
이 작업을 수행 할 수 있었지만 아무도이 작업 ConfigParser
을 수행하는 방법에 대한 예를 보여주지 않았으므로 속성 파일의 간단한 파이썬 리더와 속성 파일의 예가 있습니다. 확장명은 여전히 .properties
이지만 .ini 파일에서 볼 수있는 것과 비슷한 섹션 헤더를 추가해야했습니다. 약간의 끔찍한 일이지만 작동합니다.
파이썬 파일 : PythonPropertyReader.py
#!/usr/bin/python
import ConfigParser
config = ConfigParser.RawConfigParser()
config.read('ConfigFile.properties')
print config.get('DatabaseSection', 'database.dbname');
특성 파일 : ConfigFile.properties
[DatabaseSection]
database.dbname=unitTest
database.user=root
database.password=
자세한 기능은 https://docs.python.org/2/library/configparser.html을 참조하십시오.
답변
자바 속성 파일은 종종 유효한 파이썬 코드입니다. myconfig.properties 파일의 이름을 myconfig.py로 바꿀 수 있습니다. 그런 다음 파일을 다음과 같이 가져 오십시오.
import myconfig
속성에 직접 액세스
print myconfig.propertyName1
답변
나는 이것이 매우 오래된 질문이라는 것을 알고 있지만 지금 당장 필요하며 대부분의 사용 사례 (모두는 아님)를 다루는 순수한 파이썬 솔루션 인 자체 솔루션을 구현하기로 결정했습니다.
def load_properties(filepath, sep='=', comment_char='#'):
"""
Read the file passed as parameter as a properties file.
"""
props = {}
with open(filepath, "rt") as f:
for line in f:
l = line.strip()
if l and not l.startswith(comment_char):
key_value = l.split(sep)
key = key_value[0].strip()
value = sep.join(key_value[1:]).strip().strip('"')
props[key] = value
return props
sep
다음 형식으로 파일을 구문 분석하기 위해 ‘:’로 변경할 수 있습니다 .
key : value
코드는 다음과 같이 올바르게 줄을 구문 분석합니다.
url = "http://my-host.com"
name = Paul = Pablo
# This comment line will be ignored
당신은 다음과 같이 받아 들일 것입니다 :
{"url": "http://my-host.com", "name": "Paul = Pablo" }
답변
파일 형식의 옵션이 있다면 언급 한대로 .ini 및 Python의 ConfigParser를 사용하는 것이 좋습니다. Java .properties 파일과의 호환성이 필요한 경우 jprops 라는 라이브러리를 작성했습니다 . 우리는 pyjavaproperties를 사용하고 있었지만 다양한 제한이 발생하면 내 구현을 끝내게되었습니다. 유니 코드 지원 및 이스케이프 시퀀스 지원 향상을 포함하여 .properties 형식을 완벽하게 지원합니다. pyjavaproperties는 디스크의 실제 파일에서만 작동하는 반면 Jprops는 파일과 유사한 객체를 구문 분석 할 수 있습니다.
답변
여러 줄 속성이없고 매우 간단한 요구 사항이있는 경우 몇 줄의 코드로 해결할 수 있습니다.
파일 t.properties
:
a=b
c=d
e=f
파이썬 코드 :
with open("t.properties") as f:
l = [line.split("=") for line in f.readlines()]
d = {key.strip(): value.strip() for key, value in l}
답변
이것은 정확히 속성은 아니지만 Python에는 구성 파일을 구문 분석하기위한 멋진 라이브러리 가 있습니다. 이 레시피 : java.util.Properties의 파이썬 대체 도 참조하십시오 .