Как разбить строку python?
Привет. Строка из 5 значений через точку с запятой, между разделителями бывает пусто и эти места надо чтобы порядок. Пробовал split без аргумента, помогите.
Ваш вопрос
Привет. Строка из 5 значений через точку с запятой, между разделителями бывает пусто и эти места надо чтобы порядок. Пробовал split без аргумента, помогите.
text.split(';').'a;;c'.split(';') возвращает ['a', '', 'c'].if item, если пустые позиции важны: он удалит эти элементы и сместит соответствие столбцов.Укажите разделитель явно. Для строки из пяти полей это может выглядеть так:
text = '10;;30;40;'
parts = text.split(';')
print(parts)
Получится ['10', '', '30', '40', '']: пустое второе поле и пустое последнее поле сохранены. Это полезно, когда каждый элемент относится к своему столбцу и перестановка позиций испортит данные.
Если вокруг значений бывают пробелы, можно обработать результат: [part.strip() for part in text.split(';')]. Такая операция сохраняет количество полей, хотя пробельное поле станет пустой строкой. Не фильтруйте пустые значения автоматически. Если дальше нужны числа, отдельно определите значение для пропуска, например None, и только непустые строки преобразуйте через int или float. Для файлов с кавычками и разделителями внутри полей применяйте csv.reader с delimiter=';'.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
v4-flash
v4-flash
Как разбить строку python?
Разделитель нужно передать явно
Вызов
text.split(';')разбивает строку по точкам с запятой. В отличие отsplit()без аргумента, он сохраняет пустые фрагменты между соседними разделителями. Поэтому строкаa;;cдаст три элемента, из которых второй будет пустой строкой. Начальный или конечный разделитель тоже создаёт пустое поле на соответствующем краю списка.Пустое значение не равно отсутствующему столбцу
Когда строка описывает запись из пяти столбцов, пустое поле обычно означает отсутствие значения именно в одном столбце. Если удалить этот элемент, следующие значения сдвинутся. Не используйте фильтрацию через
if partи не вызывайтеfilter(None, parts), пока не решите, что позиции несущественны. После разбиения можно проверитьlen(parts)и сравнить его с ожидаемыми пятью полями.Пробелы обрабатываются отдельно
Если значения окружены пробелами, выражение
[part.strip() for part in text.split(';')]уберёт внешние пробельные символы у каждого элемента. Оно не удаляет элементы из списка. Однако пробелы внутри значения сохраняются, а поле, состоящее только из пробелов, становится пустой строкой. Для некоторых форматов это правильно, для других исходные пробелы нужны.Когда простого разбиения мало
Если внутри значения встречается точка с запятой в кавычках, обычный
splitвсё равно разделит её. Для табличного файла используйтеcsv.readerи задайте нужный разделитель. Этот модуль учитывает структуру кавычек, чего метод строки не делает. Преобразование числовых столбцов выполняйте уже после чтения полей, отдельно обрабатывая пустые значения и неверные числа, чтобы ошибка одной строки не оставалась незамеченной.