用带重音符号和特殊字符集的Python读取YAML文件

2024-05-20 01:07:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python读取以下YAML文件:

countries:
  IT:
    "Italia"
  PT:
    "Portugal"
  ES:
    "España"
  PE:
    "Perú"
  FR:
    "France"
  MX:
    "México"
  BR:
    "Brasil"
  CO:
    "Colombia"
  CL:
    "Chile"
  ZA:
    "South Africa"

使用以下简单代码:

import yaml
with open('file.yaml') as file:
    countries = yaml.load(file, Loader='yaml.FullLoader')
print(countries)

但我得到的结果是:

{'countries': {'IT': 'Italia', 'PT': 'Portugal', 'ES': 'España', 'PE': 'Perú', 'FR': 'France', 'MX': 'México', 'BR': 'Brasil', 'CO': 'Colombia', 'CL': 'Chile', 'ZA': 'South Africa'}}

正如你所见,所有的口音和特殊字符,如“尼”都是混乱的。你知道为什么,怎么修吗?你知道吗

我使用的是python3.7


Tags: ptyamlesitfrcountriesfilepe
3条回答

你可以试试gensim.utils.deaccent

from gensim.utils import deaccent

mydict={'countries': {'ES': 'España', 'PE': 'Perú', 'MX': 'México', 'ZA': 'South Africa'}}

for key, value in mydict.items():
    for k,v in value.items():
        print(deaccent(value[k]))

输出:

Espana
Peru
Mexico
South Africa

你正在使你的生活变得比必要的复杂 皮亚马尔。与FullLoader"Loads the full YAML language"相反, 它只解析yaml1.1(十年前就过时了),并没有完全解析 加载它。你必须处理太多非ASCII的细节 处理。你知道吗

在鲁阿迈尔.亚马尔(免责声明:我是该软件包的作者),你可以这样做

import sys
from pathlib import Path
import ruamel.yaml

yaml_file = Path('file.yaml')

yaml = ruamel.yaml.YAML(typ='safe')

countries = yaml.load(yaml_file)
print(countries)

它给出:

{'countries': {'IT': 'Italia', 'PT': 'Portugal', 'ES': 'España', 'PE': 'Perú', 'FR': 'France', 'MX': 'México', 'BR': 'Brasil', 'CO': 'Colombia', 'CL': 'Chile', 'ZA': 'South Africa'}}

因此,您不必打开Path实例,也不必记住这样做 以一种特殊的方式。(您也可以将这样的实例交给yaml.dump()

你应该把它读作UTF-8。你知道吗

with open('file.yaml', 'rt', encoding='utf8') as file:   
     countries = yaml.load(file)

相关问题 更多 >