Уведомления

Группа в Telegram: @pythonsu

#1 Май 23, 2014 23:08:35

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

Доброго времени суток!
Для решения таких задач на виндоусе есть следующие решения, не требующие офиса от микрософта:
Программа_____________стоимость
Total Doc Converter всего 1500.00 рублей
Okdo Document Converter Professional 79.95 $
Doxillion Document Converter 2.17 $29.99 USD
Ultra Document To Text Converter 2.0.2010.1127 $29.95 USD
Free Word/Doc Excel/Xls PowerPoint/PPT To Text Converter 5.8 $49.95 USD
Doc2Txt 1.0 $29.00 USD
CZ Document Converter V5.0 Only $260, 30-day money-back guarantee.
Вопрос: почему так дорого?
Предлагаю свою консольную программку, пожалуйста. Бесплатно
В основном проблема с doc: в разные года микрософты использовали разные кодировки, а расширение всё то же doc. В текстах указания на год выпуска не находил, видимо зашифровано.
Работает так себе, не айс, но кроме doc-ов результат получается вполне приличный.
Для 3 питона.

P.S.: Мой профиль - лингвистика. Никакого технического образования не имею, а питоном временами занимаюсь просто для удовольствия или когда для какой-то задачи без питона не обойтись. Поэтому прошу строго не судить.
Если появятся хорошие предложения по улучшению кода - мне будет интересно.
Спасибо.

Офлайн

#2 Май 23, 2014 23:10:41

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

Вот скрипт.

Прикреплённый файлы:
attachment pyall2txt.py (3,9 KБ)

Офлайн

#3 Май 24, 2014 01:32:56

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

Рекомендации:
1. Ознакомиться с PEP8 ибо читать код сложно
2. Множественное присваивание.
3. Менеджер контекстов.
4. ООП даст Вам крылья.
5. global вообще плохо. Очень плохо.
6. Ну и по-мелочи много всяких бяк

P.S. Хотя для первого раза очень не дурно.

P.S.S. Хотите - можно более детально. Только уже по-скайпу. Ибо времени писать час то, что можно рассказать за 5 минут нет. Если надумаете, можете кинуть свой скайп в личку. Только здесь отписаться не забудьте. А то из лички письма бывает уходит в спам.

Отредактировано 4kpt_II (Май 24, 2014 01:33:42)

Офлайн

#4 Май 24, 2014 08:20:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

Если встать на формальную точку зрения то преобразование в txt вообще непонятно что. Большая часть форматов исходно уже текстовая, но содержит разметку.

Думаю дорого, потому что редко встречается. А редко встречается потому что почти никому не нужно.

Обычно нужно не выбросить разметку, а преобразовать из одной формы в другую см.
http://ru.wikipedia.org/wiki/Pandoc



Офлайн

#5 Май 24, 2014 10:00:16

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

Pandoc - сильная штука. Когда нужно было, то в сети попадался только мусор. Но все равно doc - это отдельная история, формат закрытый. Pandoc с ним не работает. В doc-ах блок текста расположен в одном месте, разметка и прочее в другом, ещё и зашифровано. И в разных версиях по-разному.

Что плохого в присваивании? И как без них можно обойтись?
global использую потому, что строка text - это внутренняя переменная функции, поэтому класс MyHTMLParser ничего в неё записать не может. Как здесь можно обойтись без global?

Классы и менеджер контекстов. Обе темы сложные. О первых представление имею, но не вижу смысла такую сложную вещь использовать в программе на 100 строчек. Зачем и в какой форме, если то же самое можно сделать функцией?
На счёт менеджера контекстов - я не понимаю, как работает эта штука. Разбирал примеры, читал книжки - всё равно не понимаю. Я не прошу объяснять - для получения навыка учебники есть и остается только найти много времени. Вопрос в другом: зачем его использовать, если работает без него? Для чего он нужен именно в этой программке?

Офлайн

#6 Май 24, 2014 13:12:39

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

evgen34
Что плохого в присваивании? И как без них можно обойтись?

У вас нет множественного присваивания, поэтому я и написал

evgen34
global использую потому, что строка text - это внутренняя переменная функции, поэтому класс MyHTMLParser ничего в неё записать не может

global очень плохая практика. Если этот модуль наследовать в другом можно отгребсти немеряно проблем (причем слабоотлавливаемых). Поэтому, если я вижу в модуле инструкцию global я его не использую Для того, чтобы обойтись без global нужны классы.

evgen34
но не вижу смысла такую сложную вещь использовать в программе на 100 строчек.

У меня есть программы с классами и на 20 строк

evgen34
О первых представление имею

Нет. Не имеете. Или имеете очень слабое, так как следующая строка это подтверждает:

evgen34
Зачем и в какой форме, если то же самое можно сделать функцией?

evgen34
Вопрос в другом: зачем его использовать, если работает без него?
Он гарантирует закрытия файла, которые Вы открываете в системе. Это как минимум.

Беру свои слова насчет скайпа обратно. Я не смогу Вам помочь. Мне некогда доказывать, что некоторые вещи нужно делать именно так. Я привык просто показывать возможности и советовать, т.е. просто помогать. Доказывать или вести дискуссию не входит в мое свободное время

P.S. Больше спорить с Вами не буду. Просто лень. Без обид. Верю, что у Вас все получиться (потенциал ведь есть). Только нужно больше слушать более опытных товарищей. Удачи.




Отредактировано 4kpt_II (Май 24, 2014 13:37:08)

Офлайн

#7 Май 24, 2014 15:11:30

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

Уважаемый 4kpt_II! Я не хочу вас и других участников беседы убедить или что-то доказать. Для меня важно понимать то, что я делаю. Если я что-то не понимаю - я этим не пользуюсь. Просто что-то делать, потому что так говорят - мне сложно. Книжки - это одно, а когда человек объяснит - это совершенно другая вещь, и другой результат.
Мне, конечно, хочется питоном пользоваться продуктивно, с меньшей затратой сил на ремонт ошибок, используя надёжные решения. Это, как максимум. Для этого одних учебников и примеров недостаточно.
Как минимум - у меня есть оригинальная, хорошая программа, написанная в помощь студенту-гуманитарию, каким и являюсь. Этот конвертер - лишь одно из звеньев. Как вы поняли качество моего кода не на высоком уровне, поэтому, в какой-то степени, людям его показывать стыдно. Зато есть идея и желание.
Программка работает, ну может быть на 95% от того, как хотелось бы. Хочу её довести до ума и, конечно, поделиться с людьми: здесь, или может сайт для неё сделаю. Если бы вы мне помогли - я буду благодарен. Только денег у меня нет - я студент не из богатых. Думаю, что это не важно.
В любом случае благодарю за беседу.

Офлайн

#8 Май 24, 2014 18:09:42

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

evgen34
Хочу её довести до ума и, конечно, поделиться с людьми
Это можно только приветствовать.

Из дискуссии мне показалось что вызывает некоторое неприятие менеджер контекста.
сравните:
f=open("a.dat","w")
f.write("(1233")
j=2/0
f.write(")")
f.close()

with open("a.dat","w") as f:
    f.write("(1233")
    j=2/0
    f.write(")")

В первом случае close не будет вызван, а во втором будет(хотя явно он не вызван). Вот и вся разница. Ну может еще чуток лаконичнее второй вариант и оформлен с более красивым отступом. Этот отступ и символизирует контекст внутри которого существует f а снаружи уже нет. Если точнее, то он виден в закрытом состоянии.
Нужно это в тех случаях когда вы гарантированно хотите завершить некоторые действия. Еще это помогает не забыть написать эти завершающие действия.



Отредактировано doza_and (Май 24, 2014 18:13:10)

Офлайн

#9 Май 24, 2014 21:04:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9794
Репутация: +  849  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

evgen34
Но все равно doc - это отдельная история, формат закрытый.
http://msdn.microsoft.com/en-us/library/cc313153.aspx

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

Допустим, нужно её включить в виде конвертера в соединение. Клиент у тебя, к примеру, подключается к серверу и получает файл, который на лету должен сконвертировать и сохранять уже новый файл. Как ты используешь эту готовую программу?

Логика должна быть заключена в классе, а всё общение с пользователем должно происходить снаружи. (Общаться с пользователем должен отдельный класс. Это следующий левел.)



Офлайн

#10 Май 24, 2014 21:14:52

evgen34
Зарегистрирован: 2013-03-26
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразователь doc, docx, odt, htm (html), fb2 в txt

Открывать для чтения / записи буду в конструкции with. Как будет доступ к компьютеру - перепишу.
Будет желание и свободное время - подскажите как можно использовать классы именно в этой программке.
Спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version