【发布时间】:2021-06-08 10:17:38
【问题描述】:
我有以下文件 (sample.yml):
Key: §
当我尝试使用以下功能阅读时:
import yaml
with open("sample.yml", "r") as f:
file = yaml.safe_load(f)
文件未正确读取:print(file) 返回
{'Key': '§'}
即使我想避免转义序列,在这种情况下是否可以使用这样的转义序列?没有它们有办法吗?
我也尝试将§ 设置为单引号('§')或双引号("§"),但是,这并没有解决问题。另外,使用yaml.load 而不是yaml.safe_load
我正在使用 pyyaml v5.4.1
如何正确读取yaml文件?
【问题讨论】:
-
§没有什么特别之处,section mark。您发布的输出看起来就像您尝试将 UTF8 字符串 display 为 ASCII(特别是拉丁语)时得到的输出。在这种情况下,UTF8 字节表示为0xC2 0xA7。在拉丁文 1 中,0xA7是§的值。要么你没有使用 Python 3,要么你的终端没有设置为显示 UTF8 字符 -
简而言之,除了终端的设置,没有什么可修复的
-
在这种情况下,
file["Key"] == "§"应该返回True,因为根据您的帖子,这应该只是终端显示问题。但是,它返回False -
您使用的是哪个特定 Python 3 版本?现在,
open的默认编码是utf8。尽管它仍然使用系统的默认值,但在某种程度上。如果您使用旧版本,open()可能会以 ASCII 格式读取文件 -
您应该明确地传递编码以确定。来自open's documentation
The default encoding is platform dependent (whatever locale.getpreferredencoding() returns)。
标签: python python-3.x yaml pyyaml