Nano Hash - криптовалюты, майнинг, программирование

python3: проблема с индексами readlines ()?

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 это ®

09.11.2010

  • Это ошибка кодирования. Индексация не имеет к этому никакого отношения (она даже не оценивается). 09.11.2010
  • используйте open(..,'rb') в Python3 для имитации поведения Python 2.x. 10.11.2010

Ответы:


1

Из вики Python:

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

Похоже, у вас другая кодировка, чем вы думаете.

09.11.2010
  • приятно знать и спасибо за ваш ответ, но это все еще не отвечает на основной вопрос. а именно, почему это проблема только в 3.x, а не в 2.x? 09.11.2010
  • Я предполагаю, что Python 3 использует другую схему кодирования, чем 2, поскольку это основное различие между ними. 09.11.2010

  • 2

    Документ по open:

    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]
    

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

    07.01.2013

    3

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

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

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

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

    07.01.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..