ConfigParser에서 사례를 유지하시겠습니까?
나는 Python의 ConfigParser 모듈을 사용하여 설정을 저장하려고 시도했다.내 앱의 경우 내 섹션에 있는 각 이름의 케이스를 보존하는 것이 중요하다.문서에서는 configParser.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')]
문서가 혼란스럽다.그들이 의미하는 것은 다음과 같다.
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')
즉, 옵션xform을 호출하는 대신 재정의하고, 재정의는 하위 클래스 또는 인스턴스에서 수행될 수 있다.재정의할 때는 함수를 호출한 결과가 아닌 함수로 설정하십시오.
나는 이것을 버그로 보고했고, 그 이후로 고쳐졌다.
나는 설정하기 위해 노력했다.optionxform
객체를 만든 직후
config = ConfigParser.RawConfigParser()
config.optionxform = str
코드에 추가:
config.optionxform = lambda option: option # preserve case for letters
이 질문에 대한 답을 알고 있지만, 나는 몇몇 사람들이 이 해결책이 유용하다고 생각할지도 모른다고 생각했다.이 수업은 기존 수업을 쉽게 대체할 수 있는 수업이다.ConfigParser
계급
@OozeMeister의 제안을 통합하기 위해 편집됨:
class CaseConfigParser(ConfigParser):
def optionxform(self, optionstr):
return optionstr
사용법이 보통과 동일하다.ConfigParser
.
parser = CaseConfigParser()
parser.read(something)
이렇게 하면 설정하지 않아도 된다.optionxform
새로운 것을 만들 때마다ConfigParser
좀 지루한 것 같아
주의사항:
ConfigParser에서 기본값을 사용하는 경우, 예를 들어:
config = ConfigParser.SafeConfigParser({'FOO_BAZ': 'bar'})
그리고 다음을 사용하여 파서를 대소문자를 구분하도록 하십시오.
config.optionxform = str
구성 파일의 모든 옵션은 해당 사례를 유지하지만FOO_BAZ
소문자로 전환될 것이다.
기본값도 대소문자를 유지하려면 @cisetree 답변과 같은 하위 클래싱을 사용하십시오.
class CaseConfigParser(ConfigParser.SafeConfigParser):
def optionxform(self, optionstr):
return optionstr
config = CaseConfigParser({'FOO_BAZ': 'bar'})
지금FOO_BAZ
케이스가 유지되고 인터폴ationMissingOptionError가 발생하지 않을 겁니다.
참조URL: https://stackoverflow.com/questions/1611799/preserve-case-in-configparser
'programing' 카테고리의 다른 글
Laravel의 vue.js 구성 요소에 있는 socket.io을 가져오는 동안 문제 발생 (0) | 2022.03.13 |
---|---|
useState() 후크는 새 값을 설정할 때 개체에서 필드를 제거함 (0) | 2022.03.13 |
MD 크기의 장치에 대해서만 요소 표시 (0) | 2022.03.13 |
페이지 지정과 관찰 가능 및 각도 9의 비동기 파이프를 결합하는 방법? (0) | 2022.03.13 |
vue-cli 구성 요소에서 lib를 빌드하고 가져오기 (0) | 2022.03.13 |