2013-06-14 5 views
3

나는 Google에서 이런 종류의 아무것도 발견하지 않은 일을 더 빠른 방법이 있는지 알고 싶습니다 다음구문 분석 파이썬 구성 파일

내가 자바 프로그램에 대한 빌드 스크립트를 구문 분석해야하는 파이썬으로 작성되었습니다. 더 구체적으로 말하자면,이 빌드 스크립트에 하드 코딩 된 사전을 구문 분석하고 싶습니다.

예를 들어,이 스크립트는 같은 항목이 포함되어

config = {} 

config["Project"] = \ 
    { 
     "Name"       : "ProjName", 
     "Version"      : "v2", 
     "MinimumPreviousVersion"  : "v1", 
    } 

def actualCode(): 
# Some code that actually compiles the relevant files 

이 (실제 컴파일이 다른 프로그램에 대한 호출을 통해 수행되어,이 스크립트는 그냥 추출 할 필요한 옵션을 설정합니다). 예를 들어, "Name"= "ProjName"등을 추출하고 싶습니다.

저는 Python의 일부인 ConfigParser 라이브러리에 대해 알고 있습니다.하지만 .ini 파일 용으로 설계 되었기 때문에 내가 말하는 빌드 스크립트에 나타날 수있는 실제 파이썬 코드로 인해 (예외 및 충돌이 발생 함) 문제가 있습니다. 약. 따라서이 라이브러리를 사용하면 ConfigParser가 반대하는 파일의 행을 먼저 읽고 파일의 행을 제거해야합니다.

구성 파일을 일반 파일로 읽고 구문 분석하는 것보다 빠른 방법이 있습니까? 나는 이것을 할 수있는 도서관을 찾고있다. 이 라이브러리가 어떤 언어인지 신경 쓰지 않아도됩니다.

+0

사전의 값과 키에 제한이 있습니까? 모든 키/값이 문자열이라면 정규식으로 내용을 아주 쉽게 파싱 할 수 있습니다. – Bakuriu

+0

@Bakuriu 빌드 스크립트에는 그 안에 사전 (일반 코드도 포함) 이상이 있습니다. 빌드 스크립트에서 사전 중 일부를 추출하려고합니다. – user929404

답변

2

비슷한 문제를 해결하려고했습니다. 가능한 한 가장 간단한 방법으로 JSON 객체를 사용하여 키를 쿼리 할 수 ​​있도록 디렉토리를 JSON 객체로 변환했습니다. 이 솔루션은 나를위한 다단계 키 값 쌍을 위해 작동했습니다. I

다음은 알고리즘입니다.

  1. 문자열 또는 파일의 정규 표현식을 사용하여 config [ "key_name"]을 찾으십시오. 문자열로 중괄호 내의 데이터를 가져옵니다 다음과 같은 정규 표현식을

    config(.*?)\\[(.*?)\\]

  2. 를 사용합니다. 복잡한 디렉토리에 {} 또는 [] 유형의 중첩 대괄호가있을 수 있으므로 일부 스택 기반 코드를 사용하십시오. 어떤 경우

    expression.replace('(', '[') 
        .replace(')', ']') 
        .replace('\\', ' ') 
    
  3. 된 JSONObject의 JSON = (된 JSONObject) 파서 다음

  4. "는"공백 문자 "\", "[]"와 슬래시 대괄호 ") ("원형 브래킷 장착 .parse (표현식)

여기에 JSON 개체가 있습니다. 원하는 방식으로 사용할 수 있습니다.

0

시도 Parboiled. 그것은 자바로 작성되었으며 당신은 문법을 작성 ... 자바도.

스택을 사용하여 요소 등을 저장합니다. 파서 클래스는 일반적이며, 최종 결과를 얻을 수 있습니다.

0

나는이 질문이 오래 전부터 알고 있지만, Java 용 놀랍도록 유용한 구성 파서 라이브러리 here을 발견했습니다.

섹션 내에서 옵션 값을 얻을 수있는 간단한 기능 getValue("sectionName", "optionName")을 제공합니다.

[sectionName] optionName = optionValue