Отправляет email-рассылки с помощью сервиса Sendsay

За 2017-12-04

[prg] Re[2]: Python: ZIP+ElementTree+FB2.

Здравствуйте, i_chay.

> обсуждаемая проблема не имеет отношения к используемому языку
> программирования, а связана с библиотеками тех или иных API. В C++ вам
> тоже
> придётся разбираться с ними, но только код не будет таким прозрачным и
> простым, как в python.

Я согласен с предыдущим оратором и вообще сказал бы, что ожидать снижение
микроменеджмента с понижением уровня языка точно не стоит. (Уровня
абстракции, а не качества.) Если нужно "освободить руки" и сделать жизнь
проще, то это точно не путь от Python к C++.
Переход к более низкоуровневым языкам оправдан, когда вы задыхаетесь от
нехватки ресурсов или страдаете от низкой производительности. Ну ещё когда
вам нужно повысить переносимость кода между разными платформами, хотя в
случае Python я бы тут тоже усомнился.
Ну а если есть чисто эстетическое пристрастие к стилю C-синтаксиса, то с
Python логичнее переходить на C#.

Возвращаясь к теме, у zipfile, в принципе, есть сторонние альтернативы, как
минимум, czipfile. Ставится просто через pip:
pip install czipfile
Правда это больше про прирост производительности, чем про прирост
функциональности. Набор функций у него практически аналогичный. Ещё я не
помню, что там с Python 3, надо уточнять, если для вас это важно.
Также всю работу с архивами вообще можно переложить на внешний компонент,
например, на консольный 7Zip, но это скорей если реально нужно распаковывать
и запаковывать.
Успехов. Никита.

   2017-12-04 21:52:19 (#3533977)

[prg] Re[3]: gui для python

Здравствуйте, Александр.

Прошу прощение, оказывается так и не ответил.

> да у меня как раз стоит Phoenix, так-же я прочитал WxPython in Action.
> но там нету примеров вывода материалов из базы данных.

Вся логика работы с БД - это задача вашего backend-движка. К технологии
построения GUI привязывать это я не вижу смысла. Когда уже вытащите чистым
Python массив или что-то ещё, это уже просто отображаете в Qt-интерфейсе
списком, таблицей или что там вам ещё нужно.

> хотелось-бы именно на python3, PyQt я то-же
> пробовал, но там не озвучивается то что вводиш в многострочные поля, как
> редактировать я не знаю.

Да, как раз поля редактирования меня там тоже расстроили. Была попытка
руками поднять более корректную обработку событий доступности, но после
первичного погружения тема показалась слишком дорогой по трудозатратам, так
что я решил, что если в приложении есть поля редактирования, то с Qt на
Windows лучше не связываться.
Qt приемлем, когда нужны просто кнопки и пр. То есть элементы управления на
один клик.

> не могли-бы вы подробнее рассказать про Django, что почитать, куда именно
> смотреть.

Django - это так называемый web-фреймворк. Самый популярный для Python, но
не самый лучший.
Лучшего не существует. Можете поискать по фразе "web-фреймворк Python" и
посмотреть, какие есть альтернативы. Возможно вы найдёте лучший для своих
задач. Не обязательно, что это будет Django.
Django - это просто первая рекомендация, так как он наиболее популярный и
распространённый, хорошо поддерживается, имеет хорошую документацию и статьи
сообщества.
Если надо на русском, то начинать лучше с сайта djbook.ru. Разумеется, к
этому моменту надо уже иметь общую базу Python как такового.
Недавно вышел Django 2.0, так что возможно имеет смысл сразу учить его, но
он требует Python минимум 3.4 или 3.5, а также наверное русская документация
ещё не подтянулась.
Успехов. Никита.

   2017-12-04 20:58:48 (#3533964)

[prg] Re: Python: ZIP+ElementTree+FB2.

Приветствую всех!

>При
> этом использую класс ElementTree.

Устарел. Надо использовать xml.etree.cElementTree (это тот же API, но
реализован на C).

> Исследования показали, что
> fromstring почему-то теряет тег fictionbook, и возвращает список из
> description и body.
>
> Ну и вообще - получается объект element, а не ElementTree... Это тоже
> как-то мне кажется неэстетичным.

Не советую пренебрегать чтением документации. Это и есть штатное поведение
указанного метода: fromstring сразу возвращает корневой Element, а не
ElementTree.
Добавьте print и убедитесь:
root = et.fromstring(b)
print (root.tag)

> Наверное, так и придется взять мозги в кулак и выучить плюсы...

Использование C++ для подобных задач -- похоже на использование самурайского
меча для заточки карандашей. Всё-таки для этого лучше использовать
карандашную точилку -- и безопасней, и результат можно получить с меньшими
усилиями.
К тому же, обсуждаемая проблема не имеет отношения к используемому языку
программирования, а связана с библиотеками тех или иных API. В C++ вам тоже
придётся разбираться с ними, но только код не будет таким прозрачным и
простым, как в python.

Успехов. Анатолий.

   "i_chay" 2017-12-04 20:01:27 (#3533955)

[prg] Python: ZIP+ElementTree+FB2.

Здравствуйте.

Python 3.6
Win7

Возник тут у меня один вопрос. Я занимаюсь парсингом FB2-книг. При
этом использую класс ElementTree. Все замечательно, кроме нескольких
моментов. об ошибке ParseError на файлах CP1251 с некоторыми символами
как-нибудь в другой раз, а пока остановлюсь на проблеме анализа FB2 в
архивах.

Суть в следующем, я очень не хочу распаковывать файлы на диск. Ну в
самом-то деле, файлов этих у меня сотни тысяч...

А вот как сделать файловый объект в оперативной памяти, никак не
соображу.

Вышел из положения при помощи функции read объекта ZipFile. Передавая
ей имя анализируемого файла:

zf.read(fn)

На выходе получается байтовая строка, которую скармливаю функции
fromstring класса ElementTree.

В общем-то работает. Но ненадёжно к сожалению. Некоторые файлы таким
образом распарсить не получается. Исследования показали, что
fromstring почему-то теряет тег fictionbook, и возвращает список из
description и body.

Ну и вообще - получается объект element, а не ElementTree... Это тоже
как-то мне кажется неэстетичным.

В общем, хочу распаковать файл из архива в какую-нибудь переменную,
которую можно скормить ElementTree... Создавать что-либо на диске
не хочу категорически.

В общем, можно ли это как-то реализовать?

Если кто захочет поиграться, с удовольствием предоставлю и код и
битый файл.

Буду благодарен за любую помощь.

И позволю уж себе немножко поныть... :-)

Всегда казалось, что работа с zip-архивами - это одна из
востребованных практических задач при написании программ. В то же
время модуль zipfile производит впечатление какого-то уж больно
куцего, особенно, если сравнить с функционалом графических
архиваторов. Например, я так и не смог сообразить, как можно
переименовать файл в архиве... Кстати, как-то совершенно не смог
скормить функции по упаковке параметр compression.
compression=ZIP_DEFLATE Python воспринимать не захотел от слова
совсем. Я даже в исходниках нашёл, как он там пишется, но так и
пришлось использовать цифровое значение нужного параметра...

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

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

   2017-12-04 14:55:49 (#3533869)