Удаление всего что входит в фигурные скобки python
Мне нужно удалять любое вхождение в фигурные скобки, вот что у меня получилось:
файл:
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)
как мне ее исправить? заранее спасибо
Ответы (4 шт):
Автор решения: DiMithras
→ Ссылка
По комментариям, .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
Пока в строке есть фигурные скобки, берём их и их содержимое, меняем строковую переменную и убираем поочерёдно.
Автор решения: n1tr0xs
→ Ссылка
Если вы не хотите/не можете использовать регулярки, то можно так:
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)
Автор решения: Stanislav Volodarskiy
→ Ссылка
Решение в стиле 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='')
Автор решения: Сергей Ш
→ Ссылка
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('}')))
