python3: проблема с индексами readlines ()? - PullRequest
2 голосов
/ 09 ноября 2010
Python 3.1.2 (r312:79147, Nov  9 2010, 09:41:54)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> open("/home/madsc13ntist/test_file.txt", "r").readlines()[6]
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/lib/python3.1/codecs.py", line 300, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xae in position 2230: unexpected code byte

и все же ...

Python 2.4.3 (#1, Sep  8 2010, 11:37:47)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> open("/home/madsc13ntist/test_file.txt", "r").readlines()[6]
'2010-06-14 21:14:43 613 xxx.xxx.xxx.xxx 200 TCP_NC_MISS 4198 635 GET http www.thelegendssportscomplex.com 80 /thumbnails/t/sponsors/145x138/007.gif - - - DIRECT www.thelegendssportscomplex.com image/gif http://www.thelegendssportscomplex.com/ "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.1; MS-RTC LM 8)" OBSERVED "Sports/Recreation" - xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx\r\n'

Кто-нибудь знает, почему .readlines () [6] не работает для python-3, но работает в 2.4?

также ... Я думал, что 0xAE было ®

Ответы [ 3 ]

0 голосов
/ 07 января 2013

открыто функциональный документ:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

чтение файлов с использованием кодировки навсегда:

open("/home/madsc13ntist/test_file.txt", "r",encoding='iso8859-1').readlines()[6]

игнорировать ошибку декодирования? Установка ошибок = игнорировать. Значение по умолчанию «ошибки» - «Нет», то же самое с «строгим».

0 голосов
/ 07 января 2013

Поскольку вопрос задается через два года, вы, вероятно, уже знаете причину. По сути, строки Python 3 являются строками Unicode. Чтобы сделать их абстрактными, необходимо указать Python, какая кодировка используется для файла.

Строки Python 2 на самом деле являются байтовыми последовательностями, и Python чувствует себя хорошо, читая любые байты из файла. Некоторые символы интерпретируются (переводы строк, табуляции, ...), но остальные остаются нетронутыми.

Python 3 open() похож на Python 2 codecs.open().

... пришло время ... закрыть вопрос, приняв один из ответов.

0 голосов
/ 09 ноября 2010

Из Python wiki :

UnicodeDecodeError обычно происходит при декодировании строки str из определенной кодировки.Поскольку кодирование отображает только ограниченное количество строк str в символы юникода, неправильная последовательность символов str приведет к сбою декодирования, специфичного для кодирования ()

Кажется, что кодировка отличается отВы думаете, что делаете.

...