181 votes

Backporting Python 3 open(encoding="utf-8") vers Python 2

J'ai une base de code Python, construite pour Python 3, qui utilise des open() de style Python 3 avec un paramètre d'encodage :

https://github.com/miohtama/vvv/blob/master/vvv/textlineplugin.py#L47

    with open(fname, "rt", encoding="utf-8") as f:

J'aimerais maintenant porter ce code vers Python 2.x, afin d'avoir une base de code qui fonctionne avec Python 2 et Python 3.

Quelle est la stratégie recommandée pour contourner le problème ? open() et l'absence de paramètres d'encodage ?

Pourrais-je avoir un Python 3 open() qui gère les flux de bytestrings, de sorte qu'il agirait comme Python 2 open() ?

1voto

MarkH Points 319

Ce n'est pas une réponse générale, mais cela peut être utile dans le cas spécifique où vous êtes satisfait de l'encodage par défaut de python 2, mais que vous voulez spécifier utf-8 pour python 3 :

if sys.version_info.major > 2:
    do_open = lambda filename: open(filename, encoding='utf-8')
else:
    do_open = lambda filename: open(filename)

with do_open(filename) as file:
    pass

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X