Как удалить лишние пробелы, оставив по одному между словами, не затрагивая при этом перенос на другую строку?

379 просмотра
0
0 Комментариев

Добрый день.

Помогите, пожалуйста со строками/списками в Питоне.

Есть файл с записанными строками, например:

введите сюда описание изображения

Его нужно преобразовать к читабельному формату.
Я его считываю в Список, Список преобразую в Строку и редактирую её:

f = open('./4.txt',"r")
BOOK = f.readlines()
s = ''.join(BOOK)
f1=open('./3.txt',"a")
s = s.replace('FILIAL_NAME\n','')
s = s.replace('ABON_FIO\n','')
f1.writelines(s)

У меня получается следующее:
введите сюда описание изображения

Вопрос в том, как удалить лишние пробелы, оставив по одному между словами, не затрагивая при этом перенос на другую строку? Split() и перенос удаляет, то есть пишется всё сплошной строкой. На каком этапе это лучше сделать (на этапе списка или уже строки) и как?

Хотел запустить цикл до конца строки, если текущий символ и следующий символ равняется » «, то replace(s[i],''), но прочитал, что replace должен быть обязательно чему-то присвоен, и не понял, как это сделать корректно.

s = re.sub (r'\s+', '',) Тоже удаляет все пробелы.

В общем, подскажите, как это организовать.

Спасибо.


Добавить комментарий

4 Answers

Python Опубликовано 12.12.2018
0

Попробуйте следующий код, должен получиться список с элементами вида [номер Филиал номер Ф И О]. Приложили бы данные текстом, а не картинкой — я бы проверил.

f = open('./4.txt',"r")
# Получим строки с данными (начинаются с числа)
result = []
for line in f:
    line = line.split()
    if line[0].isdigit():
        result.append(line)
# В случае если филиал и имена идут чередуясь
end_result = []
for i in range(0, len(result), 2):
    end_result.append(result[i] + result[i+1])

Добавить комментарий
0

with open('file.txt') as f:
    text = '\n'.join(' '.join(line.split()) for line in f)

Добавить комментарий
0

Я бы сделал так:

import re
s = re.sub(" +", " ", s)

Ну или так, без импорта re:

while "  " in s:
    s= s.replace("  ", " ")

Добавить комментарий
0

Чтобы оставить один пробел:

>>> text = "hello     python  world !!"
>>> text.split()
['hello', 'python', 'world', '!!']
>>> new_text = ' '.join(text.split())
print(new_text)
'hello python world !!'

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up