Форум сайта python.su
Программа должна открыть файл с русским текстом и выполнить в нем следующую замену: сократить все последовательности согласных букв до одной, убрав в такой последовательности все согласные кроме первой (программа -> погама) и полученный результат записать в новый файл.
начало и конец я понимаю как делать а вот саму середину нет.
Помогите , плиз
# coding: utf-8
import re
data = open('book.txt').read().decode('utf-8')
Что тут писать не знаю
open('new_book.txt','w').write(data.encode('utf-8'))
Офлайн
#!/usr/bin/env python # -*- coding: utf-8 -*- import re text = u"""Программа должна открыть файл с русским текстом и выполнить... ЦККПССРСФСР""" def repl(m): return m.group(1)[0] fixed = re.sub(ur"(?<=\B)([цкнгшщзхфвпрлджчсмтб]{2,})", repl, text, flags=re.I + re.U) print fixed
Офлайн
>>> import re >>> >>> s = """ ... abcdefgabcdefg ... абвгдеёабвгдеё ... """ >>> >>> pat = r'([{0}])[{0}]+'.format( ... 'bcdfghjklmnpqrstvwxz' ... 'бвгджзйклмнпрстфхцчшщъь' ... ) >>> >>> output = re.sub(pat, r'\1', s, flags=re.I) >>> print(output) abefabef абеёабеё >>>
Офлайн
Попробовал этот вариант ничего не получилось текст просто переписался в новый файл
# coding: utf-8
import re
s = open('book.txt').read().decode('utf-8')
pat = r'()+'.format('bcdfghjklmnpqrstvwxz', ‘бвгджзйклмнпрстфхцчшщъь’)
output = re.sub(pat, r'\1', s, flags=re.I)
open('newbook.txt','w').write(output.encode('utf-8'))
А вот этот вариант получился, спасибо большое
# coding: utf-8
import re
text = open('book.txt').read().decode('utf-8')
def repl(m):
return m.group(1)
fixed = re.sub(ur"(?<=\B)({2,})", repl, text,
flags=re.I + re.U)
open('new2book.txt','w').write(fixed.encode('utf-8'))
А можно узнать где в первом ошибка? мне его както проще преподу будет объяснить
Офлайн
nightviя такое не писалpat = r'()+'.format('bcdfghjklmnpqrstvwxz', ‘бвгджзйклмнпрстфхцчшщъь’)
Офлайн
py.user.nextя подумал что так можно преобразовать вот этот фрагмент
я такое не писал
>>> pat = r'([{0}])[{0}]+'.format( ... 'bcdfghjklmnpqrstvwxz' ... 'бвгджзйклмнпрстфхцчшщъь' ... )
Отредактировано nightvi (Март 13, 2013 06:58:49)
Офлайн
в одну строку он выглядит так:
pat = r'([{0}])[{0}]+'.format('bcdfghjklmnpqrstvwxzбвгджзйклмнпрстфхцчшщъь')
nightviправильно так и пиши, просто надо убрать “>>> ” и “… ” в начале
А как правильно его записать надо?
Отредактировано py.user.next (Март 13, 2013 09:20:06)
Офлайн
Хм, с (?<=\B) я перемудрил. Подумал, что первую последовательность нельзя трогать.
Офлайн
reclosedevага я ее просто убрал и все работает. Спасибо большое
Хм, с (?<=\B) я перемудрил. Подумал, что первую последовательность нельзя трогать.
# coding: utf-8 import re s = open('book.txt').read().decode('utf-8') pat = r'([{0}])[{0}]+'.format('bcdfghjklmnpqrstvwxzбвгджзйклмнпрстфхцчшщъь') output = re.sub(pat, r'\1', s, flags=re.I) open('newbook.txt','w').write(output.encode('utf-8'))
Отредактировано nightvi (Март 13, 2013 18:25:04)
Офлайн
nightviСвязано с особенностью работы со строками в 2.7.
может подскажет где ошибка? версия питона 27
pat = ur'([{0}])[{0}]+'.format(u'bcdfghjklmnpqrstvwxzбвгджзйклмнпрстфхцчшщъь')
output = re.sub(pat, r'\1', s, flags=re.I + re.U)
Офлайн