Ich versuche, eine Liste von Zeichenfolgen nach Gebietsschema zu sortieren. Ich habe die Babel-Bibliothek für andere i18n-bezogene Aufgaben verwendet, sie unterstützt jedoch keine Sortierung. Das Python- locale
Modul bietet eine strcoll
Funktion, erfordert jedoch, dass das Gebietsschema des Prozesses auf das Gebietsschema festgelegt wird, mit dem ich arbeiten möchte. Eine Art Schmerz, aber ich kann damit leben.
Das Problem ist, dass ich das Gebietsschema nicht wirklich festlegen kann. Die Dokumentation für das locale
Modul enthält das folgende Beispiel:
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
Wenn ich das laufen lasse, bekomme ich folgendes:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\Lib\locale.py", line 494, in setlocale
locale.Error: unsupported locale setting
Was mache ich falsch?
Ubuntu 13.04
,Linux 3.8.0-19
mit Python2.7.4
beim Versuch , das Gebietsschema festgelegtfr_FR
. Das Einstellen hatfr_FR.UTF-8
für mich funktioniert.'eng_usa'
('en_US'
funktionierte nicht)Dies ist die einzig richtige Verwendung, um ein Beispiel für das deutsche Gebietsschema zu liefern:
import locale locale.setlocale(category=locale.LC_ALL, locale="German" # Note: do not use "de_DE" as it doesn't work)
quelle
German
zuPortuguese_Brazil.1252
. Kennen Sie eine Dokumentation, in der diese Werte aufgeführt sind?Sie sollten ein explizites Gebietsschema nicht an setlocale übergeben, es ist falsch. Lassen Sie es aus der Umwelt herausfinden. Sie müssen ihm eine leere Zeichenfolge übergeben
import locale locale.setlocale(locale.LC_ALL, '')
quelle
Ubuntu
Unter Ubuntu kann dieses Problem auftreten, da Sie dieses lokale System nicht auf Ihrem System installiert haben.
Aus der Shell versuchen Sie Folgendes:
und prüfen Sie, ob Sie das Gebietsschema finden, an dem Sie interessiert sind. Andernfalls müssen Sie es installieren:
Dabei ist XXX Ihre Sprache (in meinem Fall "xxx = it", italienisches Gebietsschema). Führen Sie dann Folgendes aus
dpkg-reconfigure
:Versuchen Sie es danach erneut in Ihrer Python-Shell:
>>> import locale >>> locale.setlocale(locale.LC_ALL,'it_IT.UTF-8')
(Dies ist für italienisches Gebietsschema, was ich brauchte)
quelle
Ich weiß, dass dies vor Jahren gefragt wurde, aber ich dachte, ich würde versuchen, das, was ich herausgefunden habe, mit Python 3.6 unter Windows hinzuzufügen:
import locale for x in locale.windows_locale.values(): print(x.replace('_','-'))
Ich habe einige ausprobiert und das scheint auch eine Möglichkeit zu sein, herauszufinden, was unter Windows verfügbar ist.
Gut zu wissen: Dies ist aus irgendeinem Grund nicht mit strptime () in der aktuellen stabilen Version von Python kompatibel
Und dann legen Sie einfach das Gebietsschema fest:
locale.setlocale(locale.LC_ALL, any_item_of_the_printed_strings)
quelle
Aus locale.setlocale-Dokumenten:
locale.setlocale(category, locale=None): """ Set the locale for the given category. The locale can be a string, an iterable of two strings (language code and encoding), or None. """"
Unter Linux (insbesondere Ubuntu) können Sie entweder verwenden
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
oder
locale.setlocale(locale.LC_ALL, ('de', 'utf-8'))
Sie erhalten den gleichen Fehler, wenn das Gebietsschema nicht auf dem System installiert ist. Stellen Sie also sicher, dass Sie das Gebietsschema auf Ihrem System installiert haben :
$ locale -a # to list the currently installed locales $ (sudo) locale-gen de_DE.UTF-8 # to install new locale
quelle