Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > Помогите решить задачу на питоне


Автор: nightvi 10.3.2013, 07:47
Суть задачи: в некотором файле есть текст, мы должны взять из файла текст заменить слово книга на тетрадь (оно там встречается много раз) и получившееся записать в новый файл. но если влово книга написана с большой буквы то и заменять она должна на тетрадь с большой буквы
я вот что написал но что то не работает. 

Код

>>> import re
>>> filename = r"book.txt"
>>> file = open(filename)
>>> line = file.readlines()
>>> new = re.sub (r'\bкнига\b', 'тетрадь', line)
>>> open ('wrbook.txt', w).write(new)


Я только начал изучать питон и много не знаю. Помогите плиз, завтра сдавать работу надо

Автор: ilnurgi 10.3.2013, 08:42
python 2.7
Код

# coding: utf-8
data = open('book.txt').read().decode('кодировка файла')
data.replace(u'книга', u'тетрадь')
data.replace(u'Книга', u'Тетрадь')
open('new_book.txt','w').write(data.encode('требуемая кодировка'))

Автор: nightvi 10.3.2013, 11:12
Спасибо а обязательным условием является использование re.sub

Автор: nightvi 10.3.2013, 11:39
Попробовал сделать но почемуто не помнялись слова. и после строчки data.replace(u'книга', u'тетрадь')
вывелось вот такое 
Код

u'\ufeff\u0414\u0438\u043d\u043e\u0437\u0430\u0432\u0440 (\u043b\u0430\u0442. \u043e\u0442 \u0434\u0440.-\u0433\u0440\u0435\u0447.
 \u03b4\u03b5\u03b9\u03bd\u03cc\u03c2 \u2014 \u0441\u0442\u0440\u0430\u0448\u043d\u044b\u0439, 
\u0443\u0436\u0430\u0441\u043d\u044b\u0439, \u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0438
 \u03c3\u03b1\u1fe6\u03c1\u03bf\u03c2 \u2014 \u044f\u0449\u0435\u0440, \u044f\u0449\u0435\u0440\u0438\u0446\u0430) \u2014 
\u043d\u0430\u0434\u043e\u0442\u0440\u044f\u0434 \u043d\u0430\u0437\u0435\u043c\u043d\u044b\u0445 
\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u043c 
\u0437\u0443\u0431\u044b \u0440\u0430\u043d\u0435\u0435 
\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430, 
\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d \u0434\u0430\u043b 
\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0433\u0443\u0430\u043d\u043e\u0434\u043e\u043d 
(\u0431\u0443\u043a\u0432. \xab\u0438\u0433\u0443\u0430\u043d\u043e\u0437\u0443\u0431\u044b\u0439\xbb) \u0437\u0430 
\u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e \u0437\u0443\u0431\u0430 \u0441 \u0437\u0443\u0431\u043e\u043c 
\u044f\u0449\u0435\u0440\u0438\u0446\u044b \u0438\u0433\u0443\u0430\u043d\u044b. \u041e\u043d \u0436\u0435 \u0432 1833 
\u0433\u043e\u0434\u0443 \u043e\u043f\u0438\u0441\u0430\u043b \u0433\u0438\u043b\u0435\u043e\u0437\u0430\u0432\u0440a \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f 
\u043f\u0430\u043d\u0446\u0438\u0440\u043d\u044b\u0445 \u044f\u0449\u0435\u0440\u043e\u0432 \u0430\u043d\u043a\u0438\u043b\u043e\u0437\u0430\u0432\u0440\u043e\u0432.\n\n'

 и все содержимое файла книга перенеслось в файл тетрадь

Автор: nightvi 10.3.2013, 13:04
Сделал вот так 

Код

# coding: utf-8
import re
data = open('book.txt').read().decode('utf-8')
new = re.sub(u'книга', u'тетрадь', data)
new = re.sub(u'Книга', u'Тетрадь', new)
open('wrbook.txt','w').write(new.encode('utf-8'))



Все работает но одна проблема есть слово книгалюб его специальное туда внедрили и оно заменяеться на тетрадьлюб  а как сделать чтобы оно оставалось неизменным?

Автор: rsm 10.3.2013, 16:48
Цитата(nightvi @  10.3.2013,  15:04 Найти цитируемый пост)
как сделать чтобы оно оставалось неизменным?

Изначально регулярное выражение было правильным, нужно вернуть обратно как было:

Код

re.sub(ur'\bкнига\b', u'тетрадь', data)


Цитата(nightvi @  10.3.2013,  15:04 Найти цитируемый пост)
есть слово книгалюб

Нет такого слова, по крайней мере в русском языке - есть книголюб.

Автор: nightvi 11.3.2013, 20:49
Спасибо, его специально туда внедрили именно с ошибкой  
Однако код не сработал в итоге просто замени \b на пробелы и все заработало
Спасибо

Вот итоговый код
Код

# coding: utf-8
import re
data = open('book.txt').read().decode('utf-8')
new = re.sub(ur' книга ', u' тетрадь ', data)
new = re.sub(ur'Книга ', u'Тетрадь ', new)
open('wrbook.txt','w').write(new.encode('utf-8'))


Автор: nightvi 11.3.2013, 21:37
Тут еще одну задачу задали помогите!

Программа должна открыть файл с русским текстом и выполнить в нем следующую замену: сократить все последовательности согласных букв до одной, убрав в такой последовательности все согласные кроме первой (программа -> погама) и полученный результат записать в новый файл.
начало и конец я понимаю как делать а вот саму середину нет.
Помогите , плиз

Код

# coding: utf-8
import re
data = open('book.txt').read().decode('utf-8')
Что тут писать не знаю
open('new_book.txt','w').write(new.encode('utf-8'))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)