Страница 1 из 2

Поиск волонтерской помощи программиста (маленький скрипт)

Добавлено: 28 авг 2016, 21:14
Natalia Novoselova
Для развития природоохранной и природоохранно-геотехнологической онлайн библиотеки
(презентация на GIS-Lab, сайт)

очень требуется волонтерская помощь программиста, который сможет написать небольшой срипт.
Суть задачи:
Есть ряд файлов book_1.html
Нужно сделать скрипт, который мог бы автоматически брать папку с такими файлами и проводить внутри каждого файла одинаковую операцию: Удалять внутри каждого файла все символы <br>
Или заменить <br> на «ничего» (если описывать требуемую операцию ручным способом).
Всё.

* * *
Суть проблемы.
Сейчас платформа Calibre, на которой сделана онлайн библиотека, имеет ошибку создания множества символов <br> внутри html файлов при генерации каталогов для онлайн библиотеки.
В результате метаданные (описание книги на ее странице) получается с огромными пропусками между параграфами. Это некрасиво. И хочется это поправить.
Я сообщила об этой проблеме разработчику Calibre:
https://getsatisfaction.com/calibre2opd ... libre2opds
Проблема оказалась глубокой и принципиальной, он это выделил в отдельный запрос:
http://calibre2opds.myjetbrains.com/you ... ue/c2o-274

К сожалению, в конце он сообщил, что быстро это решить не получится. Что ошибка глубокая и потребует работы. То есть это можно ожидать в следующих релизах платформы, но как-то не наверняка. Но есть выход - написать такой скрипт, который будет очищать генерируемые html файлы от символов <br>. Сам он его не хочет делать, поскольку не хочет тратить силы на временные решения.



Если сможет кто-то помочь своими знаниями и написать такой срипт – для развития библиотеки и ее презентации в природоохранном сообществе это очень важно..

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


В исходных каталогах они именуются book_1.html, book_2.html, book_3.html (для каждой книги)


Пример описания книги с ошибкой (ссылка на принт скрин страницы):
https://scontent.fcpq3-1.fna.fbcdn.net/ ... e=5838BDE3
И он же сейчас виден онлайн (ссылка на библиотеку со страницей данной книги)
http://www.green-forums.info/greenlib/g ... ok_11.html

И пример того же описания без злостных <br> (ссылка на принт скрин). Этого результата я добилась после ручного удаления симвоов <br> из html файла
https://scontent.fcpq3-1.fna.fbcdn.net/ ... e=58457A36


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

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 29 авг 2016, 05:01
Denis Rykov

Код: Выделить всё

find . -type f -name '*.html' -exec sed -i 's/<br>//g' {} \+

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 29 авг 2016, 10:51
Александр Мурый
Вот простой Python-скрипт. Удаляет из всех html-файлов текущего каталога, где лежит сам скрипт (включая вложенные каталоги), все теги <br> (файлы перезаписываются). Запускается из командной строки в виде:

Код: Выделить всё

python html_remove_br.py
При острой терминалофобии лучше запускать, например, через IDLE.
html_remove_br.zip
(439 байт) 437 скачиваний

Код: Выделить всё


import os
from glob import glob
import shutil

curr_dir = os.path.dirname(os.path.abspath(__file__))
infiles = [y for x in os.walk(curr_dir) for y in glob(os.path.join(x[0], '*.html'))]

for infile in infiles:
infile = r"%s" % infile
outfile = str(infile).replace('.html','_edit.html')

with open(infile, 'r') as f1, open(outfile, 'w') as f2:
for line in f1.readlines():
f2.write(line.replace('<br>',''))

shutil.move(outfile, infile)

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 29 авг 2016, 15:18
Natalia Novoselova
Александр Мурый писал(а):Вот простой Python-скрипт. Удаляет из всех html-файлов текущего каталога, где лежит сам скрипт (включая вложенные каталоги), все теги <br> (файлы перезаписываются).
Огромное спасибо, Александр !!! :)

Работает! :D

Запускается из командной строки в виде:

Код: Выделить всё

python html_remove_br.py
При острой терминалофобии лучше запускать, например, через IDLE.
Я его записала в каталог с генерируемым файлами библиотеки и запустили по двум кликам мышки. Да, он так автоматически запустился через командную строку.

Проверила на компе, как выглядит сайт - теперь описания книг генерируются правильно. :) Загружу в обновленном виде на сайт.

Не возражаете, я передам ваш скрипт на форум Calibre. Пока они не решили эту задачу внутри платформы - смогут им пользоваться.

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 29 авг 2016, 16:40
Александр Мурый
Natalia Novoselova писал(а):Не возражаете, я передам ваш скрипт на форум Calibre. Пока они не решили эту задачу внутри платформы - смогут им пользоваться.
Не против, т.к. всё честно скопипастил из интернетов и немного доработал :)

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 30 авг 2016, 02:53
Natalia Novoselova
Александр Мурый писал(а):
Natalia Novoselova писал(а):Не возражаете, я передам ваш скрипт на форум Calibre. Пока они не решили эту задачу внутри платформы - смогут им пользоваться.
Не против, т.к. всё честно скопипастил из интернетов и немного доработал :)
Передала в той же теме последним сейчас сообщением.
https://getsatisfaction.com/calibre2opd ... libre2opds

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 30 авг 2016, 06:56
Игорь Белов
Natalia Novoselova писал(а):Не возражаете, я передам ваш скрипт на форум Calibre. Пока они не решили эту задачу внутри платформы - смогут им пользоваться.
Не факт, что разработчики пользуются Питоном. А вот для скрипта Дениса подойдёт любая UNIX-подобная среда, хоть GnuWin под Windows, и у них это есть, — проект кросс-платформенный.

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 30 авг 2016, 16:41
Natalia Novoselova
Игорь Белов писал(а):
Natalia Novoselova писал(а):Не возражаете, я передам ваш скрипт на форум Calibre. Пока они не решили эту задачу внутри платформы - смогут им пользоваться.
Не факт, что разработчики пользуются Питоном. А вот для скрипта Дениса подойдёт любая UNIX-подобная среда, хоть GnuWin под Windows, и у них это есть, — проект кросс-платформенный.

Да... но я, увы, не поняла, что мне делать с тем, что написал Денис. :(
То есть как его использовать?

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


Несомненно, Денису также большое спасибо. Наверное, если бы Александр не сделал бы более простой вариант, я бы с этим разобралась.
И его вариант также могу записать в тему форума Calibre (в т.ч. разработчик же может его, наверное, и как-то для постоянного решения, при желании, использовать, записав код внутрь кода платформы).. но сначала надо понять, что с ним вообще делать.

Хм.. да, по программированию пока как-то ближе к нулю по знаниям, хоть и есть желание взяться за это тоже. Может и придется для своих задач.

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 30 авг 2016, 17:11
trir
bash (от англ. Bourne again shell, каламбур «Born again» shell — «возрождённый» shell) — усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Одна из наиболее популярных современных разновидностей командной оболочки UNIX. Особенно популярна в среде Linux, где она часто используется в качестве предустановленной командной оболочки.

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 30 авг 2016, 17:15
Александр Мурый
Natalia Novoselova писал(а): Тут бы в самый раз вспомнить обновленые правила GIS-Lab, где не рекомендуют слишком краткие ответы, который вопрошающий не может понять.
Да, просьба ко всем отвечающим не гнушаться краткого комментария.

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 30 авг 2016, 17:19
Игорь Белов
Natalia Novoselova писал(а):...я, увы, не поняла, что мне делать с тем, что написал Денис. :(
То есть как его использовать?
Всё просто. Это даже не скрипт, а команда, которая вводится в консоли:
img20160830170119.png
img20160830170119.png (2.78 КБ) 11842 просмотра
img20160830191734.png
img20160830191734.png (3.8 КБ) 11796 просмотров
Впрочем, для многократного использования можно сохранить её как скрипт:

Код: Выделить всё

#!/bin/sh
find . -type f -name '*.html' -exec sed -i 's/<br>//g' {} +
Утилита find находит в текущей директории (точка) простые файлы ( -type f ), имена которых заканчиваются на ".html" ( -name '*.html' ), и для каждого запускает на исполнение утилиту sed ( -exec sed ).

sed изменяет файлы «на месте» ( -i ), заменяя "<br>" на пустую строку глобально, т.е. многократно во всём файле ( 's/<br>//g' ). При этом для неё подставляется имя файла, найденного find ( {} ). Плюс ( + ) предполагает использование более эффективной обработки за счёт запуска на исполнение после предварительного создания списка имён файлов, если этих файлов очень много.

Просто, ёмко, эффективно. Unix way.

Проекты, создающие среду Unix под Windows: Cygwin, MinGW/MSYS, GnuWin32. Лучше устанавливать из OSGeo4W, чтобы получить интегрированное окружение с QGIS и другими приложениями.

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 30 авг 2016, 19:51
ericsson
Узнаю gis-lab по ответам вне контекста, которые нарочито не учитывают личность спрашивающего.
Вот вам видео-мурзилка, как сделать то же самое под Windows в GUI, используя бесплатный софт https://www.youtube.com/watch?v=9j8Djan7Pm0

(А то сейчас эта тема разрастется в заведомо тупиковую "bash/Python для чайников".)

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 30 авг 2016, 20:03
trir
А ещё есть PowerShell

Re: Поиск волонтерской помощи программиста (маленький скрипт

Добавлено: 30 авг 2016, 20:25
Игорь Белов
ericsson писал(а):Узнаю gis-lab по ответам вне контекста, которые нарочито не учитывают личность спрашивающего.
Вот вам видео-мурзилка, как сделать то же самое под Windows в GUI, используя бесплатный софт https://www.youtube.com/watch?v=9j8Djan7Pm0

(А то сейчас эта тема разрастется в заведомо тупиковую "bash/Python для чайников".)
trir писал(а):А ещё есть PowerShell
О чём вы, о каком контексте? Разве у разработчиков Calibre всё под Windows крутится? Мы ведь говорили о скрипте, которым Наташа решила с ними поделиться.

еще про скрипт немного

Добавлено: 31 авг 2016, 00:03
Natalia Novoselova
Еще про скрипт немного (это можно внести в первую закрытую тему)

К этому посту Игоря Белова:
viewtopic.php?f=5&t=21416#p145992

Как именно ввести этот код в консоль? Так, я вхожу в папку, где лежат html файлы. И что нужно сделать, чтобы ввести код в консоль? :) У меня там нет никакой консоли, если что.
Я передам код Дениса Рыкова тоже, поскольку там сказали, что могут использовать его для основного решения (ну пусть у них будет выбор).