Удаление разрывов строк в Python
Если у вас возникла необходимость используя Python удалить разрывы строк из текста, то можно воспользоваться следующим методом текстовой переменной:
Метод replace заменяет в строке все вхождения подстроки old на подстроку new. Если методу replace задать еще один параметр count то заменены будут не все вхождения, а только первые count из них.
Существуют следующие типы разрывов строк:
Пример удаления разрывов строк в Python:
- //Удаление всех трех типов разрывов строк
string = string.replace(«\r»,»»)
string = string.replace(«\n»,»»)
Удаление элементов списка по условию
Из списка чисел удалить элементы, значения которых принадлежат определенному диапазону (например, больше 35-ти и меньше 65-ти). Удаляемые значения сохранить в другом списке.
Решение задачи на языке программирования Python
Алгоритм решения задачи выглядит простым. Достаточно перебрать элементы списка и удалить те, которые удовлетворяют условию. Однако при удалении элемента на его место становится следующий, но поскольку мы переходим к следующей ячейке, то пропускаем проверку того, что стал на место удаленного. Таким образом, цикл for , в теле которого перебираются элементы, использовать нельзя, так как меняется количество элементов списка.
a = [96, 72, 44, 29, 97, 69, 25, 12] print("A =", a) b = [] for i in a: if 20 i 90: a.remove(i) b.append(i) print("A =", a) print("B =", b)
A = [96, 72, 44, 29, 97, 69, 25, 12] A = [96, 44, 97, 25, 12] B = [72, 29, 69]
В примере число 44 оказалось пропущенным, так как когда было удалено 72, то 44 стало на его место. На следующей итерации цикла проверялось содержимое третьей ячейки, в которой уже стояло число 29. То же самое касается числа 25, перед которым было удалено 69.
В Python удалять элементы списка можно не только с помощью метода remove , также инструкцией del , при которой указывается сам список и индекс удаляемого элемента.
Также будем использовать цикл while , измеряя на каждой его итерации длину списка, индекс же увеличивать только в том случае, если удаления элемента не произошло.
import random a = [] for i in range(10): n = round(random.random() * 100) a.append(n) print("A =", a) b = [] i = 0 while i len(a): if 35 a[i] 65: b.append(a[i]) del a[i] else: i += 1 print("A =", a) print("B =", b)
Примеры выполнения программы:
A = [66, 57, 72, 65, 37, 67, 23, 16, 30, 72] A = [66, 72, 65, 67, 23, 16, 30, 72] B = [57, 37]
A = [1, 65, 85, 62, 2, 1, 52, 63, 36, 94] A = [1, 65, 85, 2, 1, 94] B = [62, 52, 63, 36]
Более оригинальным способом решения задачи является перебор элементов списка с конца. В этом случае индекс меняется от большего к меньшему. При этом если происходит удаление элемента и сокращение длины списка, это не оказывает никакого влияния на элементы (их индексы), стоящие до удаляемого значения.
from random import randint a = [randint(0, 99) for j in range(10)] print("A =", a) b = [] i = len(a) - 1 while i >= 0: if 35 a[i] 65: b.insert(0, a[i]) del a[i] i -= 1 print("A =", a) print("B =", b)
Здесь вместо метода append() используется insert() , чтобы элементы во втором списке шли в том же порядке, в котором они были в первом, а не задом наперед.
В случае перебора с конца также можно использовать цикл for , если знать о том, что с помощью функции range() можно создавать диапазоны от большего числа к меньшему.
from random import randint a = [randint(0, 99) for j in range(10)] print("A =", a) b = [] for i in range(len(a)-1, -1, -1): if 35 a[i] 65: b.insert(0, a[i]) del a[i] print("A =", a) print("B =", b)
Выражение range(len(a)-1, -1, -1) при длинне списка a в 10 элементов означает, что будет получен диапазон, первый элемент которого 9, последний 0 (значение -1 в диапазон не входит). Третий аргумент в функции range() является шагом, то есть здесь следующий элемент получается из предыдущего вычитаем единицы.
X Скрыть Наверх
Решение задач на Python
Удаление «\n» в списке через цикл или при открытии файла
Через функцию открываю файлик, для получения значений построчно в список. И на выходе получаю такое:
Кликните здесь для просмотра всего текста
['Александр\n', 'Дмитрий\n', 'Максим\n', 'Сергей\n', 'Андрей\n', 'Алексей\n', 'Артём\n', 'Илья\n', 'Кирилл\n', 'Михаил\n', 'Никита\n', 'Матвей\n', 'Роман\n', 'Егор\n', 'Арсений\n', 'Иван\n', 'Денис\n', 'Евгений\n', 'Даниил\n', 'Тимофей\n']
Все бы ничего, но очень этот символ новой строки ‘\n’ ни к селу ни к городу.
В Интернете нашел вот такое:
str.rstrip('\n')
С одним элементом для теста работает, как данный метод красиво оформить в цикл, подскажите?
Пытался написать такой цикл, так там если «text2» сменить на «text» уходит в бесконечный цикл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
text = ['Александр\n', 'Дмитрий\n', 'Максим\n'] # text = 'Александр\n' print(text) # print(text.rstrip("\n")) # text = text.rstrip("\n") text2 = [] for x in text: print(x) y = x.rstrip('\n') text2.append(y) print("\t" + " " + str(text)) print("\n" + str(text2))
Можно ли как то обойтись без таких костылей?
И модернизировать мою функцию?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
import random import os import sys os.chdir(r"D:\python_lab\random_FIO") surname = [] name = [] middle_name = [] def openfile(name_file, name_list): f = open(name_file, 'r', encoding='utf-8') line = f.readline() while line: name_list.append(line) # name_list.rstrip('\n') # print(name) # break line = f.readline() f.close #name_list = [line.rstrip('\n') for line in name_list] openfile('name.txt', name) print(name)
Палками не бить
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как при открытии word, или PowerPoint или jpeg файла открыть созданную мною программу на c#?
Появилась необходимость открывать программу при открытии другого файла, как это сделать?
При открытии файла или папки он удаляется !
При нажатии на любой файл (папка, файл, даже "мой компютер" в проводнике), система начинает удалять.
Зависает 1С при открытии или прочтении файла эксель!
Здравствуйте. Пытался прочитать однотипные файлы, но на некоторых файлах 1с зависает, также и при.
Падение приложений при открытии или сохранении файла
День добрый! Опишу проблему: Проблема наблюдается в любом из приложений (Word, Firefox, . ).
Конфиликт имен при открытии файла через код
Знаю что проблема старая, но нигде не нашел нормального решения. Гуглится по: excel Range Name.
7283 / 4105 / 1795
Регистрация: 27.03.2020
Сообщений: 6,929
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
surname = [] name = [] middle_name = [] def openfile(name_file, name_list): f = open(name_file, 'r', encoding='utf-8') line = f.read().split() #for i in line : name_list.extend(line) # name_list.rstrip('\n') # print(name) # break #line = f.readline() f.close #name_list = [line.rstrip('\n') for line in name_list] openfile('name.txt', name) print(name)
Python: удалить переносы строк и лишние пробелы из строки?
Всем привет. Подскажите плз, как решить задачу с минимальным изобретанием велосипедов. Нужно очистить строку от символов переноса (заменить на пробелы) и убрать лишние пробелы и пустые строки.
Сейчас это делается вот так:
‘ ‘.join(filter(None, map(unicode.strip, input_string.splitlines())))
Может есть более стандартный способ?
Попытки привлечь либу textwrap приводят только к раздутию кода… Может, я не умею ее готовить?
- Вопрос задан более трёх лет назад
- 95001 просмотр
Комментировать
Решения вопроса 1
Регуляркой:
import re
mystr = » balabla\n zzz »
re.sub(«^\s+|\n|\r|\s+$», », mystr)
В этом примере удаляем пробелы в начале и конце строки и символы переноса строки. Отредактируйте под свои нужды.
Ответ написан более трёх лет назад
Нравится 9 3 комментария
Fak3 @Fak3 Автор вопроса
Спасибо за наводку!
Задача решается так:
re.sub(«\s*\n\s*», ‘ ‘, s.strip())
re.sub(«\s+», » «, s)
все норм, только вот так:
import re
mystr = » balabla\n zzz »
mystr = re.sub(«^\s+|\n|\r|\s+$», », mystr)
PS Спасибо за способ, помогло
Ответы на вопрос 4
' '.join(s.split())
не подойдёт?
Ответ написан более трёх лет назад
Нравится 5 1 комментарий
Правда при этом не только переносы и пробелы будут обработаны, но вообще все пробельные символы (табы например). Но в обычных юзкейсах это именно то что нужно.
php программист
Регулярка \s+ отличный способ =)
Ответ написан более трёх лет назад
Нравится 1 3 комментария
Fak3 @Fak3 Автор вопроса
Что-то мне фантазии не хватает, как это регуляркой решить. Поподробней можно?
Рустам Сафин @snegovikufa
Подозреваю через re.match (вроде?) создаешь список кандидатов на замену, а затем применяешь your_string.replace(what_from, what_to)
Fak3 @Fak3 Автор вопроса
А как регуляркой найти список кандидатов на замену?
__author__ = 'dikkini@gmail.com' from itertools import groupby def lines_filter(iterable): """ input: any iterable output: generator or list """ wait_chr = False is_begin = True #======================================================================================================== # You can delete "groupby" and the result will not change, but will increase the length of the input list. #======================================================================================================== for item, i in groupby(iterable): if item: is_begin = False if wait_chr: wait_chr = False yield '' yield item elif not is_begin and not wait_chr: wait_chr = True if __name__ == '__main__': list1 =['','','','i','hgf', '','','','9876','','','7','','9','','',''] # Input list print [i for i in lines_filter(list1)] # Output to the list
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
string.rstrip()
или
string = string.replace(«\n»,»»)
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Python
Как превратить свою аватарку в Telegram в часы?
- 1 подписчик
- 6 часов назад
- 40 просмотров