Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 'Checksum\t\x85\r\n'.split()
['Checksum']
Где часть после вкладки?
Но эти работы, как и ожидалось:
>>> 'Checksum\t\x84\r\n'.split()
['Checksum', '\x84']
>>> 'Checksum\t\x85\r\n'.split('\t')
['Checksum', '\x85\r\n']
>>> 'Checksum\t\x84\r\n'.split('\t')
['Checksum', '\x84\r\n']
Те же результаты на Python 3.6.6.
Интересно, что он отлично работает на Python 2.7.10
Python 2.7.10 (default, Aug 17 2018, 17:41:52)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 'Checksum\t\x85\r\n'.split()
['Checksum', '\x85']
>>> 'Checksum\t\x84\r\n'.split()
['Checksum', '\x84']
2 ответа
split()
без аргументов разбивается на пробелы. \x85
- это пробел; это U + 0085 NEXT LINE (NEL).
Версия Python 2 работает так, как вы ожидали, потому что Python 2 str.split
считает только пробелы ASCII. Если бы вы использовали строку Unicode в Python 2, вы бы увидели такое же поведение.
Потому что это рассматривается как пробел:
>>> "\x85".isspace()
True
str.split()
без аргументов удаляет в соответствии со всеми пробельными символами, а также удаляет «пустые поля» при разбиении
Таким образом, все пробельные символы были удалены. \x84
не является пробелом, поэтому он сохраняется:
>>> "\x84".isspace()
False
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.