См. str.split
документы , это поведение специально упоминается:
Если задано sep
, последовательные разделители не группируются и
считаются разделителями пустых строк (например, '1,,2'.split(',')
возвращает ['1', '', '2']
). Аргумент sep может состоять из нескольких
символы (например, '1<>2<>3'.split('<>')
возвращает ['1', '2',
'3']
). Разделение пустой строки с указанным разделителем возвращает
['']
.
Если sep
не указан или равен None
, , то используется другой алгоритм расщепления
применяется: пробеги последовательных пробелов рассматриваются как один
разделитель, и результат не будет содержать пустых строк в начале
или конец, если строка имеет начальный или конечный пробел . Как следствие,
разбиение пустой строки или строки, состоящей только из пробелов
с разделителем None
возвращает []
.
Python пытается сделать то, что вы ожидаете. Большинство людей, не думающих слишком усердно, вероятно, ожидают
'1 2 3 4 '.split()
чтобы вернуть
['1', '2', '3', '4']
Подумайте о разделении данных, где вместо вкладок использовались пробелы для создания столбцов фиксированной ширины - если данные имеют разную ширину, в каждой строке будет разное количество пробелов.
В конце строки часто есть конечные пробелы, которые вы не видите, и по умолчанию это также игнорируется - это дает вам ответ, который вы ожидаете визуально.
Когда дело доходит до алгоритма, используемого при указании разделителя, подумайте о строке в файле CSV:
1,,3
означает, что в 1-м и 3-м столбцах есть данные, а во втором нет данных, поэтому вы бы хотели
'1,,3'.split(',')
чтобы вернуть
['1', '', '3']
в противном случае вы не сможете определить, из какого столбца пришла каждая строка.