2016-05-31 3 views
3

정상적인 줄 바꿈을 사용하는 대신 '\ n'을 인쇄하는 것만 큼 기대할 것입니다. 줄 바꿈을 실제로 어떻게 만들 수 있습니까?pyyaml이 출력에 구조를 올바르게 표시하도록하려면 어떻게해야합니까?

>>> test2 = [{'A':['a', 'b']}, {'B':'b'}] 
>>> yaml.dump(test2) 
'- A: [a, b]\n- {B: b}\n' 
>>> 
+3

'print'를 사용해 보셨습니까? 대화식 프롬프트의 문자열은 줄 바꿈을 표시하지 않으므로 '인쇄'해야합니다. –

+0

아니, 나는 바보 야. 고맙습니다. – Fallacy11

+0

문제 없습니다. 내가 대답으로 게시, 마음을 받아들이겠습니까? –

답변

2

dump() 루틴 여러 선택적 인수가 첫번째되는 스트림 인 데이터 (stream=)으로 연재한다.

하면 데이터가 정상적으로 단지 None를 반환 getvalue()을, 오브젝트하여 dump() 돌아 간다 직렬화 및 그 경우에되는 객체와 같은 파일이 생성됩니다 스트림 (StringIO() 또는 BytesIO())를 지정하지 않은 경우.

출력 스트림을 지정하지 않으므로 PyYAML은 출력을 쓸 위치를 알지 못하며 getvalue()의 결과를 문자열로 반환합니다. encoding= 매개 변수를 제공하면 문자열이 아닌 Python 3에서 바이트 배열을 얻을 수 있습니다.

당연히 print 문자열 일 수 있습니다.하지만 그건 PyYAML을 사용하는 사람들이 보게되는 가장 일반적인 실수 중 하나입니다. 작은 데이터 구조의 경우 이것은 허용 될 수 있지만 대용량 데이터 구조의 경우 메모리에 문자열 표현을 작성하면 불필요하게 많은 양의 메모리를 소비 할 수 있습니다.

당신은 스트림 매개 변수를 제공하는 습관에 익숙해해야합니다 (print에서 직렬화에서, 다른 하나)

>>> import yaml 
>>> test2 = [{'A':['a', 'b']}, {'B':'b'}] 
>>> yaml.dump(test2) 
'- A: [a, b]\n- {B: b}\n' 
>>> import sys 
>>> yaml.dump(test2, stream=sys.stdout) 
- A: [a, b] 
- {B: b} 
>>> 
이 또한 출력의 끝에 이중 줄 바꿈을 받고에서 당신을 방지

을 .

+0

이것들은 훨씬 더 나은 대답이기 때문에 상당히 중요한 구조 (1000+ 회선)로 생성 될 것입니다. 설명을 주셔서 감사합니다. – Fallacy11

+0

@ Fallacy11 완전히 이해하지 못합니다 (저는 아닙니다. 네이티브 스피커), 거대한 데이터 구조를 가지므로 메모리 사용량이 중요 할 것입니까? – Anthon

+0

예 저는 다양한 요구 사항을 가진 다양한 공급 업체 장비로 무책임한 플레이 북을 제작하고 있습니다.이 모든 것들이 YAML 파일에 정의 될 필요가있다.이 환경은 다른 환경과 로직을 정의해야 할 필요가 있기 때문에 시간이 지남에 따라 크게 늘어날 것이다. 같은 시간에 더 큰 자원 효율성이 나을수록 좋습니다. 필자가 print를 사용하여 파일을 만드는 대신 직접 이것을 먹일 수 있다면 (필자도 그렇게 할 수 있습니다) 훨씬 더 효율적으로 만들 것입니다. – Fallacy11

1

print을 사용하여 줄 바꿈을 얻을 수 있습니다. 이 방식으로 대화식 프롬프트에 표시되는 문자열은 절대로 줄 바꿈을 렌더링하지 않습니다. 문자열 주위에 인용 부호 (')를 표시하여 문자열이 표시되는 방식을 알 수 있습니다 (print과 함께 표시되지 않음). PyYAML에

>>> test2 = [{'A':['a', 'b']}, {'B':'b'}] 
>>> yaml.dump(test2) 
'- A: [a, b]\n- {B: b}\n' 
>>> print(yaml.dump(test2)) 
- A: [a, b] 
- {B: b} 

>>> 
+0

왜 투표가 늦습니까? 내 대답은 정확합니다 ... –

관련 문제