나는 확실하지 않다. 즉 뭔가 ruamel.yaml 및 PyYAML의 많은 사용자를 그리워하는 것 때문에 그들이 그러나입니다 : 대신
print(dump(data))
dump(data, sys.stdout)
전자는에 사용되는 비 사실적인 데이터 잘 될 수있다 (PyYAML) 문서화를 사용하지만 실제 데이터에 나쁜 습관을 갖습니다.
가장 좋은 해결책은 my_logging_func()
스트림을 지향하는 것입니다. 이는 예를 들어. 다음과 같이 수행 할 수 :
user: rsaw
question: 47614862
을하지만, 한 번에 한 줄에서 작업해야하는 경우 MyLogger.write()
(이 경우 8 번)를 여러 번 호출되는 점에 유의하고, : 제공
import sys
import ruamel.yaml
data = dict(user='rsaw', question=47614862)
class MyLogger:
def write(self, s):
sys.stdout.write(s.decode('utf-8'))
my_logging_func = MyLogger()
yml = ruamel.yaml.YAML()
yml.dump(data, my_logging_func)
라인 버퍼링을해야합니다.
비 스트리밍 인터페이스를 래핑 할 수 있지만 항상 편리한 것은 아닙니다. ruamel.yaml<=0.15.34
에서 transform
인수를 남용 할 수 있습니다. 이 인수는 YAML 문서의 전체 문자열 표현 (이전 API가 문자열을 반환하므로 비효율적이므로)에 전달되는 함수를 기대하며 변형 된 문자열을 반환하여 스트리밍해야합니다. 당신이 스트림 싱크 할 경우, 함수의 반환 값을 걱정하지 않아도 :
import sys
import ruamel.yaml
data = dict(user='rsaw', question=47614862)
def my_logging_func(s):
print(s, end='')
class NullStream:
def write(self, s):
pass
yml = ruamel.yaml.YAML()
yml.dump(data, NullStream(), transform=my_logging_func)
이 같은 출력을 얻을 수 있습니다. ruamel.yaml>0.15.34
와
, 당신은 transform
매개 변수를 제공하는 가정, 당신은 스트림으로 None
를 제공 할 수
import sys
import ruamel.yaml
data = dict(user='rsaw', question=47614862)
def my_logging_func(s):
print(s, end='')
yml = ruamel.yaml.YAML()
yml.dump(data, None, transform=my_logging_func)
그리고 당신도 할 이상을 남용 할 수있는 :
import ruamel.yaml
data = dict(user='rsaw', question=47614862)
yml = ruamel.yaml.YAML()
yml.dump(data, None, transform=print)
를 (하지만 것 예전의 print(dump(data))
처럼 출력 끝 부분에 새로운 개행 문자를 넣으십시오.)
당신은 내 영웅 안톤입니다. 자세한 설명을 해주셔서 감사 드리며 ruamel.yaml에 대한 모든 양심적 인 헌신적 인 노력에 감사드립니다. – rsaw