[PYTHON] ConfigParser에서 대소 문자를 보존 하시겠습니까?
PYTHONConfigParser에서 대소 문자를 보존 하시겠습니까?
파이썬의 ConfigParser 모듈을 사용하여 설정을 저장하려고했습니다. 내 응용 프로그램의 경우 내 섹션의 각 이름의 대소 문자를 보존해야합니다. ConfigsParser.optionxform ()에 str ()을 전달하면이 작업을 수행 할 수 있다고 나와 있지만 작동하지 않습니다. 이름은 모두 소문자입니다. 내가 놓친 게 있니?
<~/.myrc contents>
[rules]
Monkey = foo
Ferret = baz
내가 얻은 것에 대한 파이썬 의사 코드 :
import ConfigParser,os
def get_config():
config = ConfigParser.ConfigParser()
config.optionxform(str())
try:
config.read(os.path.expanduser('~/.myrc'))
return config
except Exception, e:
log.error(e)
c = get_config()
print c.options('rules')
[('monkey', 'foo'), ('ferret', 'baz')]
해결법
-
==============================
1.설명서가 혼란 스럽습니다. 이것이 의미하는 바는 다음과 같습니다.
설명서가 혼란 스럽습니다. 이것이 의미하는 바는 다음과 같습니다.
import ConfigParser, os def get_config(): config = ConfigParser.ConfigParser() config.optionxform=str try: config.read(os.path.expanduser('~/.myrc')) return config except Exception, e: log.error(e) c = get_config() print c.options('rules')
나는. optionxform을 호출하는 대신에 무시하십시오. 서브 클래스 또는 인스턴스에서 재정의를 수행 할 수 있습니다. 재정의 할 때는 함수를 호출하여 함수를 호출하십시오.
나는 이것을 버그로보고했으며, 그 후에 수정되었다.
-
==============================
2.나를 위해 옵션을 개체를 만든 후 즉시 설정하려면 일한
나를 위해 옵션을 개체를 만든 후 즉시 설정하려면 일한
config = ConfigParser.RawConfigParser() config.optionxform = str
-
==============================
3.나는이 질문에 답을 얻었지만 어떤 사람들은이 솔루션이 유용하다고 생각할 수 있다고 생각했다. 이 클래스는 기존 ConfigParser 클래스를 쉽게 대체 할 수있는 클래스입니다.
나는이 질문에 답을 얻었지만 어떤 사람들은이 솔루션이 유용하다고 생각할 수 있다고 생각했다. 이 클래스는 기존 ConfigParser 클래스를 쉽게 대체 할 수있는 클래스입니다.
@ OozeMeister의 제안을 통합하여 편집 :
class CaseConfigParser(ConfigParser): def optionxform(self, optionstr): return optionstr
사용법은 일반 ConfigParser와 동일합니다.
parser = CaseConfigParser() parser.read(something)
따라서 새로운 ConfigParser를 만들 때마다 optionxform을 설정하지 않아도되므로 지루합니다.
-
==============================
4.경고:
경고:
ConfigParser에서 기본값을 사용하는 경우 (예 :
config = ConfigParser.SafeConfigParser({'FOO_BAZ': 'bar'})
다음을 사용하여 파서에서 대소 문자를 구분하도록하십시오.
config.optionxform = str
설정 파일의 모든 옵션은 대소 문자 그대로 유지되지만 FOO_BAZ는 소문자로 변환됩니다.
기본값도 대소 문자를 유지하게하려면 @icedtrees answer와 같은 서브 클래 싱을 사용하십시오.
class CaseConfigParser(ConfigParser.SafeConfigParser): def optionxform(self, optionstr): return optionstr config = CaseConfigParser({'FOO_BAZ': 'bar'})
이제 FOO_BAZ는 대소 문자를 유지하며 InterpolationMissingOptionError를 가지지 않습니다.
-
==============================
5.코드에 추가하십시오 :
코드에 추가하십시오 :
config.optionxform = lambda option: option # preserve case for letters
from https://stackoverflow.com/questions/1611799/preserve-case-in-configparser by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 문자열 목록의 요소에서 후행 줄 바꾸기 (0) | 2018.11.04 |
---|---|
[PYTHON] pylint가있는 단일 특정 라인을 무시할 수 있습니까? (0) | 2018.11.04 |
[PYTHON] Django 1.7의 초기 마이그레이션에서 이전하는 방법은 무엇입니까? (0) | 2018.11.04 |
[PYTHON] 파이썬 기계화 + GAEpython 코드 (0) | 2018.11.04 |
[PYTHON] OpenCV + Python + Mac으로 비디오 쓰기 (0) | 2018.11.04 |