Удаление всего что входит в фигурные скобки python

Рейтинг: 0Ответов: 4Опубликовано: 14.01.2023

Мне нужно удалять любое вхождение в фигурные скобки, вот что у меня получилось:

файл:

bfyby4hebfn{3}gfu4hr4u{g7h8idej}fuhe
e5yrc6ut7gy{erctvy}rtfgy{2}drftgyg5r

Программа:

f = open('st.txt')
for j in range(2):
    n = f.readline()
    for i in range(len(n)):
        if n[i] == '{':
            n.split('}', 1)[:1]
    print(n)

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

как мне ее исправить? заранее спасибо

Ответы

▲ 1Принят
txt = 'bfyby4hebfn{3}gfu4hr4u{g7h8idej}fuhee5yrc6ut7gy{erctvy}rtfgy{2}drftgyg5r'
# 1
print(''.join(x[x.find('}')+1:] for x in txt.split('{')))
# 2
print(''.join(x.split('{')[0] for x in txt.split('}')))
▲ 0

По комментариям, .split() действительно не совсем понятно зачем нужен. Можно через .replace():

f = open('st.txt')
for j in range(2):
    n = f.readline()
    while n.find('{') != -1:
        n = n.replace(n[n.find('{'):n.find('}')+1], '')
    print(n)
f.close()
Вывод:
bfyby4hebfngfu4hr4ufuhe
e5yrc6ut7gyrtfgydrftgyg5r

Пока в строке есть фигурные скобки, берём их и их содержимое, меняем строковую переменную и убираем поочерёдно.

▲ 0

Если вы не хотите/не можете использовать регулярки, то можно так:

with open('input.txt', 'r') as file:
    for line in file:
        while (i := line.find('{')) != -1:
            line = line[:i] + line[line.find('}')+1:]
        print(line)
▲ 0

Решение в стиле C. Файл считывается посимвольно. level хранит вложенность фигурных скобок:

with open('st.txt') as f:
    level = 0
    while c := f.read(1):
        if c == '{':
            level += 1
        if level == 0:
            print(c, end='')
        if c == '}':
            level -= 1

Решение в противоположном стиле. Файл считывается целиком, текст обрабатывается регулярным выражением:

import re


with open('temp.txt') as f:
    print(re.sub('\\{.*?\\}', '', f.read(), flags=re.DOTALL), end='')