Показаны сообщения с ярлыком Python. Показать все сообщения
Показаны сообщения с ярлыком Python. Показать все сообщения

3 мая 2015 г.

Краткая инструкция по преобразования сканов для отправки в налоговую (ФНС)

В соответствии с пунктом 3.3 приказа ФНС России от 09.11.2010 N ММВ-7-6/535@, изображения для передачи по телекоммуникационным каналам связи (ТКС) должны иметь:

  • 256 градаций серого;
  • разрешение 150-300 DPI (точек на дюйм);
  • глубину цвета 8.

Для быстрого преобразования большого количества изображений 1 в соответсвии с требованиями ФНС необходимо.

  1. Установть утилиту ImageMagick 32-бита / 64-бита и интерпритатор языка программирования Python 32-бита / 64-бита;
  2. Скачать скрипт magick-fns-gray(скачать) и поместить его в папку с изображениями, которые необходимо преобразовать;
  3. Дважды щелкнуть по скрипту левой кнопкой мыши;
  4. Дождаться завершения преобразования. Вся информация выводится в черном окне.
  5. Преобразованные файлы появятся в папке magick_out.

Скрипт кроссплатформенный, работает в ОС Linux, Windows, Mac OS и других, которые поддерживаются программой ImageMagick и языком Python.

Материалы по теме.

Сайты


  1. Преобразовывать можно от 1 изображения до ..., верхнего ограничения нет, все упирается в параметры компьютера. Время обработки также зависит от размеров изображений и параметров ПК.  

1 февраля 2015 г.

Python 3: Генерация случайных чисел (модуль random)

«Генерация случайных чисел слишком важна, чтобы оставлять её на волю случая»

—  Роберт Кавью

Note

Python порождает случайные числа на основе формулы, так что они не на самом деле случайные, а, как говорят, псевдослучайные [1]. Этот способ удобен для большинства приложений (кроме онлайновых казино) [2].

3 января 2015 г.

Python: Список установленных модулей

Чтобы просмотреть список установленных модулей Python, нужно в интерпретаторе ввести команду help('modules')
Python 3.2.3 (default, May  3 2012, 15:54:42)
[GCC 4.6.3] on linux2
>>> help('modules')
Получим такой вывод (часть вывода опущена)
Please wait a moment while I gather a list of all available modules

CDROM               bdb                 imp                 shlex
DLFCN               binascii            importlib           shutil
IN                  binhex              inspect             signal
...
>>>

29 декабря 2014 г.

Руководство: Генератор документации Sphinx

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

В руководстве подробно описан процесс генерации документации с помощью связки reStructuredText, Python Sphinx, GitHub и сервиса Read the Docs.

Доступно в трёх форматах — онлайн, HTML и ePub.

Структура руководства

В главе «Генератор документации Sphinx» описана установка и основные настройки Sphinx.

В главе «Стандартный синтаксис разметки reStructuredText» приведен стандартный синтаксис разметки reStructuredText. Глава «Конструкции разметки Sphinx» содержит описание дополнительных конструкции разметки, вносимых Sphinx. Данные конструкции значительно расширяют функционал reStructuredText, но не поддерживаются стандартной разметкой и поэтому не могут быть применены вне Sphinx.

Глава «Система управления версиями Git» является справочником по основным командам Git.

Глава «GitHub и Read The Docs» рассматривает веб-сервис для хостинга IT-проектов GitHub, сервис Read The Docs и их взаимодействие.

В главах «Известные проблемы» и «Часто задаваемые вопросы» описаны основные проблемы, с которыми я столкнулся.

Авторские права

Руководство распространяется на условиях лицензии «Attribution-ShareAlike» («Атрибуция — На тех же условиях») 4.0 Всемирная (CC BY-SA 4.0).

Содержание

16 декабря 2014 г.

Python 3: Извлекаем данные о ежедневных курсах валют с сайта ЦБ РФ

В этой статье хочу рассмотреть пример скрипта на языке программирования Python3, который извлекает данные о текущем курсе валют с официального сайта Центрального Банка РФ и сохраняет их в отдельном файле, который в дальнейшем можно открыть с помощью LibreOffice Calc и применить к ним всю его мощь.

Пример больше интересен тем, что в нём используется парсинг XML-файла.

Сам скрипт находится здесь. Условно, скрипт решает три задачи:

  1. Скачивает XML-файл с курсами валют с сайта ЦБ РФ;
  2. Анализирует (парсит) XML-файл и извлекает оттуда информацию о курсах валют в нужной нам форме;
  3. Сохраняет полученную информацию в текстовом файле в виде значений, разделённых запятыми (CSV).

29 сентября 2014 г.

ImageMagick: кадрирование(обрезка) изображений

Декабрь — тяжелая пора для всех студентов. Я не исключение. Сегодня срочно пришлось сканировать (точнее фотографировать) лекции и рассылать их однокурсникам. Изображений получилось много и некогда было тратить время на всякие программы вроде Scan Tailor и gscan2pdf (обе есть в репозиториях Ubuntu). Да и зачем, если под рукой есть ImageMagick и любимый скриптовый язык (в моем случае Python).

Фотографии получились, во-первых, большие, т.к. я поленился лезть в настройки фотоаппарата. Во-вторых, вокруг листов с лекцией было много лишнего пространства.

Таким образом, мне нужно было решить две задачи:
  1. массово уменьшить размеры фотографий
  2. массово кадрировать фотографии
С первой задачей справился мой скрипт из предыдущего поста. Со второй задачей я справился при помощи одной из команд ImageMagick. Об этом и пойдет речь дальше.

Кадрирование изображений с помощью ImageMagick

Кадрирование осуществляется простой командой:
convert -crop {size}{+-}x{+-}y input.png output.png

На деле это выглядит так:
convert -crop 500x640+60+80 input.png output.png

Чтобы понять что значит эта команда, необходимо обратиться к рисунку.
Допустим, весь лист это наше исходное изображение. Серый прямоугольник это полезная область, которая нам нужна, а все остальные поля можно обрезать. Пунктирная линия для наглядности. Серая область имеет размер 500x640 пикселей и отстоит от левого края на 60, от верхнего на 80 px.

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

Итак, применив команду "convert -crop 500x640+60+80 input.png output.png" к моему примеру я получил четко серый прямоугольник:

Массовое кадрирование изображений

Перед тем, как массово обрезать все фотографии с лекциями, мне пришлось потренироваться на одной из них, чтобы найти оптимальную область. А затем применил команду:
convert -crop 500x640+60+80 *.png output.png

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

В качестве выходящего файла я написал output.png, программа сама добавила всем обработанным файлам концовку в виде числа. Т.е. в итоге у меня в папке появились изображения output-0.png, output-1.png, ..., output-n.png.

После этого я загнал все изображения в один PDF файл. И тоже при помощи ImageMagick. Впрочем, это уже тема другого поста.

Массовое кадрирование изображений с разной ориентацией

Данное действие стало моим коронным номером. Если есть необходимость кадрировать изображения с разной ориентацией, то для них нужно подобрать свои пропорции оставляемой области.

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

Изменить нужно 78 и 90 строки, вместо:
78 str = 'convert "%s" -resize %sx -quality 95 %s/"%s"' % (file, width, out, file)
и
90 str = 'convert "%s" -resize x%s -quality 95 %s/"%s"' % (file, height, out, file)
написать:
78 str = 'convert -crop 500x640+320+50 "%s" %s/"%s"' % (file, out, file)
90 str = 'convert -crop 640x500+320+50 "%s" %s/"%s"' % (file, out, file)


В 78 строке прописываются параметры для альбомно-ориентированных изображений, в 90 для портретно.

Об экономии времени

В завершении хочу обратить ваше внимание на один примечательный факт. На все эти действия у меня ушло не больше 5 минут. И все они были выполнены с помошью инструмента, который в большинстве дистрибутивов установлен по умолчанию.

ImageMagick: Пакетная обработка изображений с разной ориентацией

Пакетная обработка изображений — одновременное автоматическое выполнение операций над множеством графических файлов.

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

Моим излюбленным инструментом является программа ImageMagick вкупе с языком программирования Python.

Преимущества ImageMagick

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

Преимущества:
  • Бесплатность
  • Многоплатформенность (Linux, Mac OS X и др. UNIX-подобные, Windows, iOS)
  • Широкий набор возможностей
  • CLI-интерфейс (да-да именно это одно из основных преимуществ, но есть и графическая оболочка)
  • Наличие интерфейсов для различных языков программирования (Python, Php, Perl и др.)
ImageMagick является консольным графическим редактором. Это означает, что перед вами не будет красивого интерфейса с панелями инструментов и множеством кнопок. Все операции задаются посредством команд, вводимых в командной строке. Многих это отпугивает, но в действительности это является преимуществом программы.

Во-первых, из-за отсутствия навороченного графического интерфейса(GUI) программа потребляет меньше ресурсов. Во-вторых, это позволяет встраивать программу в собственные скрипты, что и мы и сделаем дальше.

Python: удаление не пустых папок

Модуль os содержит ряд функций для работы с файлами, в том числе функции
os.remove(path)
os.removedirs(path)
os.rmdir(path)
Однако они могут удалять только пустые папки.

Для удаления не пустых папок нужно использовать модуль shutil и функцию из него shutil.rmtree(path, ignore_errors=False, onerror=None)

27 сентября 2014 г.

Python: Определение позиции подстроки (функции str.find и str.rfind)

Определение позиции подстроки в строке с помощью функций str.find и str.rfind.
In [1]: str = 'ftp://dl.dropbox.com/u/7334460/Magick_py/py_magick.pdf'

Функция str.find показывает первое вхождение подстроки. Все позиции возвращаются относительно начало строки.
In [2]: str.find('/')
Out[2]: 4


In [3]: str[4]
Out[3]: '/'


Можно определить вхождение в срезе. первое число показывает начало среза, в котором производится поиск. Второе число — конец среза. В случае отсутствия вхождения подстроки выводится -1.
In [4]: str.find('/', 8, 18)
Out[4]: -1


In [5]: str[8:18]
Out[5]: '.dropbox.c'


In [6]: str.find('/', 8, 22)
Out[6]: 20


In [7]: str[8:22]
Out[7]: '.dropbox.com/u'


In [8]: str[20]
Out[8]: '/'


Функция str.rfind осуществляет поиск с конца строки, но возвращает позицию подстроки относительно начала строки.
In [9]: str.rfind('/')
Out[9]: 40


In [10]: str[40]
Out[10]: '/'

26 сентября 2014 г.

Python: Извлекаем имя файла из URL

Понадобилось мне отрезать от URL всё, что находится после последнего слэша, т.е.названия файла. URL можеть быть какой угодно. Знаю, что задачу запросто можно решить с помощью специального модуля, но я хотел избежать этого. Есть, как минимум, два способа справиться с поставленным вопросом.

Способ №1

Достаточно простой способ. Разбиваем строку по слэшам с помощью функции split(), которая возвращает список. А затем из этого списка извлекаем последний элемент. Он и будет названием файла.
In [1]: str = 'http://dl.dropbox.com/u/7334460/Magick_py/py_magick.pdf'

In [2]: str.split('/')
Out[2]: ['http:', '', 'dl.dropbox.com', 'u', '7334460', 'Magick_py', 'py_magick.pdf']

Повторим шаг с присвоением переменной:
In [3]: file_name = str.split('/')[-1]

In [4]: file_name
Out[4]: 'py_magick.pdf'

Способ №2

Второй способ интереснее. Сначала с помощью функции rfind() находим первое вхождение с конца искомой подстроки. Функция возвращает позицию подстроки относительно начала строки. А далее просто делаем срез.
In [5]: str = 'http://dl.dropbox.com/u/7334460/Magick_py/py_magick.pdf'

In [6]: str.rfind('/')
Out[6]: 41

Делаем срез:
In [7]: file_name = str[42:]

In [8]: file_name
Out[8]: 'py_magick.pdf'