Comment faire pour forcer PyYAML à la charge des chaînes unicode objets?
La PyYAML forfait charges non marquées à des chaînes de caractères comme des caractères unicode ou str objets, en fonction de leur contenu.
Je voudrais utiliser l'unicode des objets tout au long de mon programme (et, malheureusement, ne peut pas passer à Python 3 pour l'instant).
Est-il un moyen facile de force PyYAML toujours des chaînes de charge unicode objets? Je ne veux pas encombrer mon YAML avec !!python/unicode
balises.
# Encoding: UTF-8
import yaml
menu= u"""---
- spam
- eggs
- bacon
- crème brûlée
- spam
"""
print yaml.load(menu)
De sortie: ['spam', 'eggs', 'bacon', u'cr\xe8me br\xfbl\xe9e', 'spam']
Je voudrais: [u'spam', u'eggs', u'bacon', u'cr\xe8me br\xfbl\xe9e', u'spam']
Vous devez vous connecter pour publier un commentaire.
Voici une version qui remplace la PyYAML de manipulation de chaînes de caractères en sortie
unicode
. En réalité, c'est probablement le résultat identique de l'autre réponse que j'ai posté, sauf délai plus court (c'est à dire vous avez encore besoin de s'assurer que les chaînes de classes personnalisées sont convertis àunicode
ou passéunicode
chaînes de vous-même si vous utilisez des gestionnaires personnalisés):(Ci-dessus donne
[u'spam', u'eggs', u'bacon', u'cr\xe8me br\xfbl\xe9e', u'spam']
)Je ne l'ai pas testé sur
LibYAML
(c-analyseur) que je n'arrivais pas à le compiler, donc je vais laisser les autres répondre comme il était.str
objets. Est-il peut-être un moyen plus simple de forcer tous-unicode sortie maintenant? J'aimerais un jour la réponse.Voici une fonction que vous pouvez utiliser pour utiliser pour remplacer
str
avecunicode
types de décodée sortie dePyYAML
:str
type, ils ne seront pas convertis àunicode
types (si vous regardez le code) je suis d'accord ce n'est pas une solution fantastique, mais il faudra travailler. essayezmake_str_unicode({0: [u'the', u'quick', u'brown', 124]})
et elle laisse entier le seul. Aussi, si vous regardez le code, il ne traitelist
,tuple
,dicts
etstr
(d'autres types/classes de rester comme ils l'ont été)str
objets àunicode
eux-mêmes (ou ajouter unelif isinstance(obj, mycustomtype: ...
et de les gérer individuellement)