2017-10-08 1 views
0

나는 Python을 사용하여 YAML 파일을 구문 분석합니다. YAML 문서의 python, yaml 아포스트로피가 포함 된 문자열을 구문 분석하는 방법

하나

는 다음과 같이 사전을 포함 : 마지막 아포스트로피가 공백 앞에 있기 때문에

scrapers: 
    results: //article[@class='story '] 

이것은 분명히 문제가 발생합니다. 공백을 제거 할 수 있다면 문제를 해결할 수 있습니다. 그러나 그것이 xpath이기 때문에 나는 할 수 없다.

누구나 그 시퀀스를 벗어날 수 있습니다. 본인은 SO 질문에 보였지만, ""의 문자열을 포장, 또는

scrapers: 
    results: //article[@class='story '] 

또는

scrapers:> 
    results: //article[@class='story '] 

또는

를 사용하여 같은 솔루션은
scrapers: 
    results: //article[@class='story ''] 

작동하지 않았다.

편집 : ScannerError : 내가 오류가 발생하지만

import yaml 
with open('/home/depot/wintergreen/yaml/scrapers.yml', 'r') as f: 
    scrapers = yaml.load(f) 

: 매핑 값이 공백을 가리키는 여기

허용되지 않습니다 내가 함께 위의 표현을 포함하는 파일을 열려고하고 story 이후. 필자는 답변자가 제안한 제안, 즉 python dict에서 yaml 표현식을 작성하려고 시도해 왔습니다. 이 작동합니다. yaml을 파일로 저장하고 다시로드하여 다시 작동시킵니다. 내가 똑같은 문자를 입력하여 YAML을 만들 때 그러나, 그것은 ... 작동하지 않습니다

EDIT2 : 그 문제는 내가 윈도우 시스템에서 YAML 파일을 생성하고 업로드는 사실에서 비롯된 생각 유닉스 서버에서.

+0

여기에 문제가있는 코드는 어디입니까? 어떤 도서관을 이용합니까? 아니면 정규식으로 YAML을 파싱하려고합니까? (당신은 안된다.) – Anthon

답변

1

그것은 구조에 대한 올바른 YAML 형식을 쉽게 찾을 수 있습니다 :입니다

d = {'scrapers': {'results': "//article[@class='story ']"}} 
print d 

import yaml 
print yaml.dump(d, default_flow_style=False) 

결과 그중 :

{'scrapers': {'results': "//article[@class='story '"}} 

scrapers: 
    results: //article[@class='story '] 
다음 YAML 인코딩 된 문자열을 만들 yaml.dump을 사용하여 파이썬에서 구조를 만들

올바른 YAML 표현이므로 문제가있는 경우 입력 텍스트가 아니라 파서가 포함되어 있습니다. 표준 yaml 라이브러리를 사용하는 경우 제대로 구문 분석해야합니다.

+0

Python의 모든 버전에 대한 표준 Python 라이브러리에는 yaml 파서가 없다. – Anthon

+0

@Chris Johnson 네, 맞습니다. 그렇게 작동합니다. 내 문제는 yaml (im은 리눅스 데비안에서 vim과 함께)을 작성하고'import yaml open ('/ home/depot/wintergreen/yaml/scrapers.yml)을 사용하여 파이썬 노트북에로드하려고했다는 것이다. ','r ') f : scrapers = yaml.load (f)'. 거기에'story' :'ScannerError : 매핑 값이 허용되지 않습니다'이후에 공백을 가리키는 오류가 나타납니다.나는 당신의 메서드로 생성 된 yaml 식을 vim에 붙여 넣으려고했는데, 여전히 같은 오류가 발생합니다. 어쩌면 인코딩 문제일까요? –

+0

@Anthon은 도서관과 표준 라이브러리를 구별하고 있습니까? 'pip install pyyaml'과'import yaml'이 잘 작동합니다. 이것은 매우 일반적인 선택입니다. –

관련 문제