많은 인수로 실행되는 명령 줄 스크립트가 있습니다. 나는 이제 너무 많은 논증이있는 지점에 왔으며, 사전 형식의 논증도 갖고 싶다.
따라서 작업을 단순화하기 위해 설정 파일을 사용하여 스크립트를 실행하고 싶습니다. 파일 구문 분석에 어떤 라이브러리를 사용해야하는지 잘 모르겠습니다. 가장 좋은 방법은 무엇입니까? 나는 물론 무언가를 망치는 것이 가능하지만, 이것에 대한 라이브러리가 있다면 나는 모두 귀입니다.
몇 가지 ‘요구 사항’:
- 사용하기보다는
pickle
쉽게 읽고 편집 할 수있는 간단한 텍스트 파일 이길 바랍니다. - 사전과 같은 데이터를 추가 할 수 있기를 원합니다. 즉, 어떤 형태의 중첩이 지원되어야합니다.
단순화 된 의사 예제 파일 :
truck:
color: blue
brand: ford
city: new york
cabriolet:
color: black
engine:
cylinders: 8
placement: mid
doors: 2
답변
config.py와 같은 일반적인 파이썬 모듈을 가질 수 있습니다 :
truck = dict(
color = 'blue',
brand = 'ford',
)
city = 'new york'
cabriolet = dict(
color = 'black',
engine = dict(
cylinders = 8,
placement = 'mid',
),
doors = 2,
)
다음과 같이 사용하십시오.
import config
print config.truck['color']
답변
제공 한 샘플 구성은 실제로 유효한 YAML 입니다. 실제로 YAML은 모든 요구를 충족하고 많은 언어로 구현되며 매우 인간 친화적입니다. 나는 당신이 그것을 사용하는 것이 좋습니다. PyYAML 프로젝트는 멋진 파이썬 모듈이 구현 YAML을 제공합니다.
yaml 모듈을 사용하는 것은 매우 간단합니다 :
import yaml
config = yaml.safe_load(open("path/to/config.yml"))
답변
가장 유용하고 사용하기 쉬운
https://wiki.python.org/moin/ConfigParserExamples
다음과 같이 “myfile.ini”를 작성하십시오.
[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True
[SectionTwo]
FavoriteColor=Green
[SectionThree]
FamilyName: Johnson
[Others]
Route: 66
그리고 다음과 같은 데이터를 검색하십시오.
>>> import ConfigParser
>>> Config = ConfigParser.ConfigParser()
>>> Config
<ConfigParser.ConfigParser instance at 0x00BA9B20>
>>> Config.read("myfile.ini")
['c:\\tomorrow.ini']
>>> Config.sections()
['Others', 'SectionThree', 'SectionOne', 'SectionTwo']
>>> Config.options('SectionOne')
['Status', 'Name', 'Value', 'Age', 'Single']
>>> Config.get('SectionOne', 'Status')
'Single'
답변
Yaml과 Json은 설정 / 구성을 저장하기 위해 가장 단순하고 가장 일반적으로 사용되는 파일 형식입니다. PyYaml을 사용하여 yaml을 구문 분석 할 수 있습니다. Json은 이미 2.5에서 파이썬의 일부입니다. Yaml은 Json의 상위 집합입니다. Json은 이스케이프가 필요한 여러 줄 문자열을 제외한 대부분의 사용 사례를 해결합니다. Yaml도 이러한 경우를 처리합니다.
>>> import json
>>> config = {'handler' : 'adminhandler.py', 'timeoutsec' : 5 }
>>> json.dump(config, open('/tmp/config.json', 'w'))
>>> json.load(open('/tmp/config.json'))
{u'handler': u'adminhandler.py', u'timeoutsec': 5}