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

Все остальное, мало относящееся к ГИС.
Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

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

Сообщение Natalia Novoselova » 28 авг 2016, 21:14

Для развития природоохранной и природоохранно-геотехнологической онлайн библиотеки
(презентация на 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 по числу книг), так же я постоянно вношу изменения в библиотеку при ее дополнении, т.е. генерирую все каталоги заново. Очевидно, что операцию по очищению надо повторять каждый раз.
Вложения
html files.zip
(6.4 КБ) 378 скачиваний

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 29 авг 2016, 05:01

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

find . -type f -name '*.html' -exec sed -i 's/<br>//g' {} \+
Spatial is now, more than ever, just another column- The Geometry Column.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

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

Сообщение Александр Мурый » 29 авг 2016, 10:51

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

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

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

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


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)
Редактор материалов, модератор форума

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

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

Сообщение Natalia Novoselova » 29 авг 2016, 15:18

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

Работает! :D

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

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

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

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

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

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

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

Сообщение Александр Мурый » 29 авг 2016, 16:40

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

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

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

Сообщение Natalia Novoselova » 30 авг 2016, 02:53

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

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

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

Сообщение Игорь Белов » 30 авг 2016, 06:56

Natalia Novoselova писал(а):Не возражаете, я передам ваш скрипт на форум Calibre. Пока они не решили эту задачу внутри платформы - смогут им пользоваться.
Не факт, что разработчики пользуются Питоном. А вот для скрипта Дениса подойдёт любая UNIX-подобная среда, хоть GnuWin под Windows, и у них это есть, — проект кросс-платформенный.
The purpose of computing is insight, not numbers

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

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

Сообщение Natalia Novoselova » 30 авг 2016, 16:41

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

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

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


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

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

trir
Гуру
Сообщения: 5286
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 30 авг 2016, 17:11

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

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

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

Сообщение Александр Мурый » 30 авг 2016, 17:15

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

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

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

Сообщение Игорь Белов » 30 авг 2016, 17:19

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

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

#!/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 и другими приложениями.
The purpose of computing is insight, not numbers

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

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

Сообщение ericsson » 30 авг 2016, 19:51

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

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

trir
Гуру
Сообщения: 5286
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 30 авг 2016, 20:03

А ещё есть PowerShell

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

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

Сообщение Игорь Белов » 30 авг 2016, 20:25

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

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

Аватара пользователя
Natalia Novoselova
Гуру
Сообщения: 3020
Зарегистрирован: 15 янв 2013, 20:14
Репутация: 69
Ваше звание: Лиса
Откуда: **
Контактная информация:

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

Сообщение Natalia Novoselova » 31 авг 2016, 00:03

Еще про скрипт немного (это можно внести в первую закрытую тему)

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

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

Ответить

Вернуться в «Все остальное»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя