繁体   English   中英

意外的split()行为Python

[英]Unexpected split() behaviour Python

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'] 

因为它被视为空白:

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

没有参数的str.split()根据所有空白字符删除,它还​​会在拆分时删除“空字段”

所以所有的空白字符都被删除了。 \\x84不是空格,所以保留:

>>> "\x84".isspace()
False

split()没有参数在空格上分割。 \\x85是空白; 这是U + 0085 NEXT LINE(NEL)

Python 2版本的工作方式与您期望的方式相同,因为Python 2 str.split仅计算ASCII空白。 如果您在Python 2上使用了Unicode字符串,那么您会看到相同的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM