Ответы пользователя по тегу Python
  • Ruby: существует ли блокировка ресурса в потоке при записи?

    @zedxxx
    может такое на Python есть?

    В питоне об этом уже давно просят и даже присылают патчи: bugs.python.org/issue8800

    Гуглятся и самописные решения:
    code.activestate.com/recipes/413393
    code.activestate.com/recipes/502283
    code.activestate.com/recipes/465156
    code.activestate.com/recipes/577803-reader-writer-...
    https://majid.info/blog/a-reader-writer-lock-for-p...

    я его тоже не знаю так что питон тоже можно использовать

    Обычно пишут на том, что лучше знают, а вы наоборот :)
    Ответ написан
  • На каком ЯП используют эту функцию GetWindowThreadProcessId?

    @zedxxx
    Эта функция из win api: msdn.microsoft.com/en-us/library/windows/desktop/m... и может быть использована любым ЯП, поддерживающим windows-платформу.
    Нужно декомпилировать этот exe. не могу найти нужный компилятор.

    Компилятор не декомпилирует, он компилирует.
    Ответ написан
    Комментировать
  • Как спарсить названия статей с сайта habrahabr при помощи grab python?

    @zedxxx
    Что такое grub: https://ru.wikipedia.org/wiki/GNU_GRUB
    Что такое grab, в мире питона: ru.wikibooks.org/wiki/Grab

    А то я смотрю, для вас что grab, что grub, всё на одно лицо :)
    Ответ написан
    Комментировать
  • Что значит данный отрывок из документации Python?

    @zedxxx
    Почему строке или числу нельзя изменить значение?

    При попытке "изменить" значение у неизменяемого типа, будет создан новый объект, которому будет присвоено новое значение. Т.е. внешне он как бы изменится, но вот "под капотом" будет происходить создание/уничтожение объектов, а не изменение одного и того же объекта (вы же в курсе, что в питоне даже простой int является объектом?). И вот такое поведение следует учитывать, чтобы писать оптимальный код, в котором не будет зазря копироваться и уничтожаться куча объектов.

    В виду этого, у строк, скажем, нельзя безболезненно изменять отдельные символы, и приходится делать странные вещи, если символ таки изменить нужно: Change one character in a string in Python?
    Ответ написан
    3 комментария
  • Как распаковать портабельную программу на python?

    @zedxxx
    Лень тратить много времени на поиск продукта с помощью которого она была упакована

    А что их искать-то? Вот список ходовых утилит: www.freehackers.org/Packaging_a_python_program
    library.zip <--- тут лежат питоновские библиотеки

    Там же должны лежать и скомпилированные модули самой программы. Распотрошите архив и сравните содержимое с оригинальным питоном. Все "лишние" файлы и будут вашей программой.
    Ответ написан
    Комментировать
  • Just Enough Python for Ansible - что именно нужно изучить? А что не нужно?

    @zedxxx
    писать playbook-и, роли

    docs.ansible.com/playbooks_intro.html
    Playbooks are expressed in YAML format (see YAML Syntax) and have a minimum of syntax, which intentionally tries to not be a programming language or script, but rather a model of a configuration or a process.

    работать с API

    Нужно знать A Byte of Python как отче наш. А дальше уже зависит от ваших потребностей. Но в любом случае, чем глубже будут знания языка и используемых модулей, тем проще будет реализовывать задуманное.
    Ответ написан
  • Python — PIL перезаписывает исходное изображение?

    @zedxxx
    Поздравляю, вы только что познакомились с таким понятием как ссылка.

    Канонический пример:
    Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a = [10, 15]
    >>> b = a
    >>> b[0] = 25
    >>> b
    [25, 15]
    >>> a
    [25, 15]
    >>>


    Поэтому, если надо именно скопировать сложный объект, то нужно пользоваться соответствующими свойствами, а не простым присвоением.
    Ответ написан
    1 комментарий
  • Как работать с растрами в памяти в GDAL (Python 2.x)?

    @zedxxx Автор вопроса
    Придумал загрузку и выгрузку растров через Pillow и numpy. Возможно, не совсем оптимально с точки зрения производительности, но работает:
    warp.py
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    import osr
    import gdal
    import numpy
    from PIL import Image
    from StringIO import StringIO
    
    
    def reproject_vrt(src_epsg, src_gt, src_size, dst_epsg):
    
        src_proj = osr.SpatialReference()
        src_proj.ImportFromEPSG(src_epsg)
    
        driver = gdal.GetDriverByName('VRT')
        src_ds = driver.Create('', src_size[0], src_size[1])
    
        src_ds.SetGeoTransform(src_gt)
        src_ds.SetProjection(src_proj.ExportToWkt())
    
        dst_proj = osr.SpatialReference()
        dst_proj.ImportFromEPSG(dst_epsg)
    
        dst_ds = gdal.AutoCreateWarpedVRT(
            src_ds,
            src_proj.ExportToWkt(),
            dst_proj.ExportToWkt())
    
        return dst_ds.GetGeoTransform(), dst_ds.RasterXSize, dst_ds.RasterYSize
    
    
    def reproject_band(band, src_epsg, src_gt, dst_epsg, dst_gt, dst_width, dst_height):
    
        src_height, src_width = band.shape
    
        driver = gdal.GetDriverByName('MEM')
    
        src_ds = driver.Create('', src_width, src_height)
        src_ds.GetRasterBand(1).WriteArray(band)
    
        src_proj = osr.SpatialReference()
        src_proj.ImportFromEPSG(src_epsg)
    
        src_ds.SetGeoTransform(src_gt)
        src_ds.SetProjection(src_proj.ExportToWkt())
    
        dst_ds = driver.Create('', dst_width, dst_height)
    
        dst_proj = osr.SpatialReference()
        dst_proj.ImportFromEPSG(dst_epsg)
    
        dst_ds.SetGeoTransform(dst_gt)
        dst_ds.SetProjection(dst_proj.ExportToWkt())
    
        gdal.ReprojectImage(src_ds, dst_ds, None, None, gdal.GRA_Bilinear)
    
        return dst_ds.ReadAsArray()
    
    
    def reproject_raster(raster, src_epsg, src_gt, dst_epsg):
    
        src_img = Image.open(StringIO(raster))
    
        dst_gt, dst_width, dst_height = reproject_vrt(src_epsg, src_gt, src_img.size, dst_epsg)
    
        src_array = numpy.array(src_img)
    
        if src_array.ndim == 3:
            dst_array_shape = (dst_height, dst_width, src_array.shape[2])
            dst_array = numpy.zeros(dst_array_shape, src_array.dtype)
            for i in range(0, src_array.shape[2]):
                band = src_array[:, :, i]
                band = reproject_band(band, src_epsg, src_gt, dst_epsg, dst_gt, dst_width, dst_height)
                dst_array[:, :, i] = band
        elif src_array.ndim == 2:
            dst_array = reproject_band(src_array, src_epsg, src_gt, dst_epsg, dst_gt, dst_width, dst_height)
        else:
            raise Exception('Unexpected array geometry!')
    
        dst_img = Image.frombytes(src_img.mode, (dst_width, dst_height), dst_array.data)
    
        raster = StringIO()
        dst_img.save(raster, format=src_img.format)
    
        return raster.getvalue()

    И ещё, как я понял перепроецировать нужно каждый канал (RGB) отдельно, иначе получается каша...
    Ответ написан
    Комментировать
  • Как склеить много больших изображений?

    @zedxxx
    Не знаю, ограничены ли вы только скриптами или можете использовать что-то кроме них, но посоветую использовать библиотеку libjpeg (или её прокаченный вариант libjpeg-turbo) и её функции для построчного чтения и записи в jpeg файл (scanline методы). В этом случае, вам понадобится очень мало памяти (несколько мегабайт) для выполнения вашей задачи, но придётся поработать с низкоуровневым api сишной библиотеки.

    У этой же библиотеки есть и ещё одна фишка - lossless склейка jpeg файлов. Для этого даже написана консольная утилита jpegtran, которая идёт в архиве с библиотекой. Только эта фишка уже использует оперативку по полной и 16Гб вам очень пригодятся.
    Ответ написан
    Комментировать