Подтвердить что ты не робот

Сохранять пробелы при использовании split() и join() в python

У меня есть файл данных с такими столбцами, как

BBP1   0.000000  -0.150000    2.033000  0.00 -0.150   1.77

а отдельные столбцы разделяются переменным количеством пробелов.

Моя цель - прочитать в этих строках, выполнить некоторую математику на несколько строк, например, умножить столбец 4 на .95 и записать их в новый файл. Новый файл должен выглядеть как оригинальный, за исключением значений, которые я изменил.

Мой подход будет читаться в строках как элементы списка. И тогда я использовал бы split() для тех строк, которые меня интересуют, что даст мне подсписку с отдельными значениями столбца. Затем я делаю модификацию, join() столбцы вместе и записываю строки из списка в новый текстовый файл.

Проблема заключается в том, что у меня есть такое различное количество пробелов. Я не знаю, как представить их так же, как я их читал. Единственный способ, который я мог придумать, - считать персонажей в строке до того, как я их разложил, что было бы очень утомительно. У кого-то есть лучшая идея решить эту проблему?

4b9b3361

Ответ 1

Вы хотите использовать re.split() в этом случае с группой:

re.split(r'(\s+)', line)

будет возвращать как столбцы, так и пробелы, чтобы вы могли снова присоединиться к строке с тем же количеством пробелов, что и в ней.

Пример:

>>> re.split(r'(\s+)', line)
['BBP1', '   ', '0.000000', '  ', '-0.150000', '    ', '2.033000', '  ', '0.00', ' ', '-0.150', '   ', '1.77']

Вероятно, вы хотите удалить новую строку с конца.

Ответ 2

Другой способ сделать это:

s = 'BBP1   0.000000  -0.150000    2.033000  0.00 -0.150   1.77'
s.split(' ')
>>> ['BBP1', '', '', '0.000000', '', '-0.150000', '', '', '', '2.033000', '', '0.00', '-0.150', '', '', '1.77']

Если мы укажем аргумент пространственного символа в функции split, он создает список без использования последовательных символов пробела. Таким образом, исходные номера пробелов восстанавливаются после функции "join".