yaml을 사용하여 다른 데이터 유형의 단일 값을 직렬화하는 경우가 자주 있습니다. 나는 PyYAML이 종종 그 문자열의 끝 부분에 '\n'
또는 '\n...\n'
문자열을 추가하는 것을 알아 챘다. 제한된 실험에서 이러한 후행 문자를 제거하는 것이 안전합니다.이 짧은 yaml 출력은 안전합니까?
기본 동작
import yaml, decimal, datetime
items = ['hello', 3, True, decimal.Decimal('3.2'), datetime.date(2013, 5, 25)]
for i in items:
data = yaml.dump(i)
print '%r %r %r' % (i == yaml.load(data), i, data)
출력됩니다 :
True 'hello' 'hello\n...\n'
True 3 '3\n...\n'
True True 'true\n...\n'
True Decimal('3.2') "!!python/object/apply:decimal.Decimal ['3.2']\n"
True datetime.date(2013, 5, 25) '2013-05-25\n...\n'
스트립 특수 후행 문자
import yaml, decimal, datetime
items = ['hello', 3, True, decimal.Decimal('3.2'), datetime.date(2013, 5, 25)]
for i in items:
data = yaml.dump(i).replace('\n...\n', '').rstrip('\n')
print '%r %r %r' % (i == yaml.load(data), i, data)
출력됩니다 :
True 'hello' 'hello'
True 3 '3'
True True 'true'
True Decimal('3.2') "!!python/object/apply:decimal.Decimal ['3.2']"
True datetime.date(2013, 5, 25) '2013-05-25'
두 번째 코드 블록이 안전합니다. 모든 입력 데이터에서 작동합니까? 나는 이것이 깨지는 경우를 찾고있다. 복잡한 중첩 된 입력 데이터로도이 문제가 해결되는 모든 경우에 관심이 있습니다.