首页 > 解决方案 > Python yaml 按原样转储表情符号

问题描述

我正在使用python 3.9.5, 和PyYaml 5.4.1.

我有一个t.yml包含以下内容的文件。

- ⬆️

我编写了一个简单的 python 代码来读取 yaml 文件并将其转储回去。

import yaml

with open("t.yml") as file:
    con = yaml.safe_load(file)
    print(con)
    with open("t.yml","w") as file:
        yaml.dump(con,file)

代码的输出是:

['⬆️']

转储yaml后,t.yml文件变成这样:

- "\u2B06\uFE0F\U0001F622"

如何以完全相同的格式转储表情符号,我加载了它们?

标签: pythonencodingyamlpyyaml

解决方案


通常,YAML 在加载文件时会丢失信息(请参阅此问题),因此您不能始终完全按照其写入方式转储它,因为有关其写入方式的信息已丢失。

在这种情况下,解决方案是设置allow_unicode

import sys,yaml

input = """
- ⬆️
"""

con = yaml.safe_load(input)
yaml.dump(con,sys.stdout, allow_unicode=True)

输出:

- ⬆️

推荐阅读