我需要一次从文件中读取YAML数据,另一次从字符串中读取。令我惊讶的是,两者可以使用相同的函数:
import yaml
data = """
hello:
world
"""
doc = yaml.safe_load(data)
print(doc)
with open("data.yaml", 'w') as f:
f.write(data)
with open("data.yaml", 'r') as f:
doc = yaml.safe_load(f)
print(doc)
输出:
{'hello': 'world'}
{'hello': 'world'}
为什么会这样呢?
这是Reader的代码: class Reader(object):
def __init__(self, stream):
if isinstance(stream, str):
self.name = "<unicode string>"
self.check_printable(stream)
self.buffer = stream+'\0'
elif isinstance(stream, bytes):
self.name = "<byte string>"
self.raw_buffer = stream
self.determine_encoding()
else:
self.stream = stream
self.name = getattr(stream, 'name', "<file>")
self.eof = False
self.raw_buffer = None
self.determine_encoding()
函数本身会检验数据类型然后做不同的处理。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。