Devin Jeanpierre
Devin Jeanpierre

Reputation: 95526

How do I case fold a string in Python 2?

Python 3.3 adds the casefold method to the str type, but in 2.x I don't have anything. What's the best way to work around this?

Upvotes: 11

Views: 7586

Answers (3)

jfs
jfs

Reputation: 414225

If PyICU is already installed; you could use it to define casefold(). Using the same example strings as in @Russ' answer:

>>> import icu
>>> casefold = lambda u: unicode(icu.UnicodeString(u).foldCase())
>>> print casefold(u"tschüß")
tschüss
>>> casefold(u"ΣίσυφοςfiÆ") == casefold(u"ΣΊΣΥΦΟσFIæ") == u"σίσυφοσfiæ"
True
>>> icu.UNICODE_VERSION
'6.3'
>>> import unicodedata
>>> unicodedata.unidata_version
'5.2.0'

The result may depend on the version of Unicode standard.

Upvotes: 1

Russ
Russ

Reputation: 11325

Check out py2casefold.

>>> from py2casefold import casefold
>>> print casefold(u"tschüß")
tschüss
>>> casefold(u"ΣίσυφοςfiÆ") == casefold(u"ΣΊΣΥΦΟσFIæ") == u"σίσυφοσfiæ"
True

Upvotes: 4

ChrisProsser
ChrisProsser

Reputation: 13088

There is a thread here which covers some of the issues (but may not resolve all), you can judge whether it is suitable for what you need. If this is no good then there are some useful tips for implementing case folding on the W3C site here.

Upvotes: 2

Related Questions