Сохранять пробелы при использовании split() и join() в python
У меня есть файл данных с такими столбцами, как
BBP1 0.000000 -0.150000 2.033000 0.00 -0.150 1.77
а отдельные столбцы разделяются переменным количеством пробелов.
Моя цель - прочитать в этих строках, выполнить некоторую математику на несколько строк, например, умножить столбец 4 на .95 и записать их в новый файл. Новый файл должен выглядеть как оригинальный, за исключением значений, которые я изменил.
Мой подход будет читаться в строках как элементы списка. И тогда я использовал бы split()
для тех строк, которые меня интересуют, что даст мне подсписку с отдельными значениями столбца. Затем я делаю модификацию, join()
столбцы вместе и записываю строки из списка в новый текстовый файл.
Проблема заключается в том, что у меня есть такое различное количество пробелов. Я не знаю, как представить их так же, как я их читал. Единственный способ, который я мог придумать, - считать персонажей в строке до того, как я их разложил, что было бы очень утомительно. У кого-то есть лучшая идея решить эту проблему?
Ответы
Ответ 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".