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
aronbo 23 Окт 2018 в 20:22

2 ответа

Лучший ответ

split() без аргументов разбивается на пробелы. \x85 - это пробел; это U + 0085 NEXT LINE (NEL).

Версия Python 2 работает так, как вы ожидали, потому что Python 2 str.split считает только пробелы ASCII. Если бы вы использовали строку Unicode в Python 2, вы бы увидели такое же поведение.

5
user2357112 supports Monica 23 Окт 2018 в 17:31

Потому что это рассматривается как пробел:

>>> "\x85".isspace()
True

str.split() без аргументов удаляет в соответствии со всеми пробельными символами, а также удаляет «пустые поля» при разбиении

Таким образом, все пробельные символы были удалены. \x84 не является пробелом, поэтому он сохраняется:

>>> "\x84".isspace()
False
5
Jean-François Fabre 23 Окт 2018 в 17:29
52954629