如果空是重要的结果,可能最好先测试原始字符串:
x = ''
if x:
# Original string was non-empty, split it
splitx = x.split(',')
if any(splitx):
# There was at least one character in the original string that wasn't a comma
第一个测试排除了空的初始字符串,第二个使用any 排除了只是拆分字符的字符串,因此返回了一大堆空字符串,但没有非空字符串。只要你得到一个非空字符串,它就会通过。
注意:如果您尝试解析 CSV 文件,请不要使用.split(',');有一个 csv module 可以正确处理这个问题(包括转义、引用等),并且应该始终用于解析 CSV,永远不要滚动你自己的解析器。额外奖励:csv 会将'' 输入转换为[] 行,您可以直接测试其真实性,而不是像str.split 那样转换为['']。示例:
>>> import csv, io
>>> f = io.StringIO('\n\na,b,c\n1,2,3\n\n')
>>> [row for row in csv.reader(f) if row] # Stripping easily
[['a', 'b', 'c'], ['1', '2', '3']]
对比与str.split(',') 相同的方法仍然不能处理引用、转义等:
>>> f = io.StringIO('\n\na,b,c\n1,2,3\n\n')
>>> stripped = (line.rstrip('\r\n') for line in f) # Must manually strip line endings first
>>> [line.split(',') for line in stripped if line]
[['a', 'b', 'c'], ['1', '2', '3']]