[Tutor] more encoding confusion
Jon Crump
jjcrump at myuw.net
Sun Aug 5 21:37:03 CEST 2007
On Sun, 5 Aug 2007, Kent Johnson wrote:
> Hmm...actually, isupper() works fine on unicode strings:
> In [18]: s='H\303\211RON'.decode('utf-8')
> In [21]: print 'H\303\211RON'
> HÉRON
> In [22]: s.isupper()
> Out[22]: True
>
> :-)
>
>
>> I modified uppers to include only the latin characters, and added the
>> apostrophe to catch placenames like L'ISLE.
>
> Then you are back to needing a regular expression I think.
>
Ah! I'm finally starting to get it. My problem wasn't with a regex to test
the line, my problem was with reading the file in as utf-8 to begin with.
When I take your advice and decode() right from the start using:
open('textfile').read().decode('utf-8').splitlines()
instead of
input = open('textfile', 'r')
text = input.readlines()
Then the regex problem does not even arise. Now I can use this instead:
for line in data:
if line[0:2].isupper():
as you point out, isupper() works just fine on unicode strings; it also
seems to consider the apostrophe uppercase as well because this catches
not only HÉRON, but L'ISLE as well.
Now my only glitch is that line.title() screws up placenames like STOKE
(BISHOP'S), turning it into Stoke (Bishop'S).
More information about the Tutor
mailing list