Задать вопрос
Ответы пользователя по тегу Python
  • Pisa — xhtml2pdf не работают размеры элемента div height, width

    Изначально юзал xhtml2pdf, но сложные документы он плохо рендерил (или просто руки не верно растут), перешел на wkhtmltopdf , пока все хорошо (единственный минус нужно ставить отдельно).
    Ответ написан
  • Структура данных для поиска подходящих CSS-правил

    Если учитывать что Вы не привязваетесь к DOM, то можно предположить что все возможныне css правила это бесконечное множество (конечно можно сделать его конечным с ограничениями на число элементов или длине строки правила). Теперь любой css или группу css или одно css правило можно представить как подмножество всех css правил. Как я понимаю Вы хотите сделать из подмножества группы css другое подмножество с меньшим или равным количесвом правил (иначе весь смысл теряется). Те Вы хотите для двух любых правил найти найти в лучшем случае одно, в худшем два правила. Тогда:

    a {...} a {...} можно преобразовать в a {...}

    a {...} div a {...} можно преобразовать в a {...} только в том случае если правила a имеют больший приоритет, например !important, в противном случае этого сделать нельзя тк данные правила определяют разные возможные подмножества.

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

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

    .base .child и .base .child .node заведомо извесно что все .base .child .node элементы будут находиться внутри .base .child.

    Таким образом если предствать такие правила как дерево, можно уменьшить затраты на поиск элементов в уже найденом базовом элементе.

    Вариации поиска. Я вижу два основных варианта:
    1. берем правило, проходим по DOM, для каждого элемента вычисляя является ли правило DOM элемента подмножеством определенного правила и применяем его, переходим к сл правилу.
    2. берем DOM и начинаем проходить по нему, для элемента вычисляя является ли правило DOM элемента подмножеством определенного каждого правила и если да, то применяем его, переходи к сл элементу.

    На второй вариант очень хорошо ложится предложение с деревом подправил и вообще кажется более интересным ввиду того что требуется один обход DOM.
    Ответ написан
    2 комментария
  • Синхронизация папок Python на разных компьютерах?

    Я бы советовал использовать virtualenv + requirements.txt и не думать про синхрогнизацию.
    Ответ написан
    1 комментарий
  • Проблема с связкой Teamcity + Fabfile + Virtualenv?

    В крайнем случае можно и без activate:

    virtualevn -p python2.7 path/to/your/env
    path/to/your/env/bin/pip install -r req.txt
    
    Ответ написан
    Комментировать
  • Загрузка торрентов на Python?

    Есть клиент написанный на питоне deluge, не знаю насколько там хорошо написано и какие библиотеки используются, но можете попробовать посмотреть.
    Ответ написан
    Комментировать
  • Python + MS Word?

    Я думаю лучше глянуть на libre office + python (python-uno). Оно точно должно уметь экспоритить в pdf.
    Ответ написан
    3 комментария
  • Идея простого проекта веб-приложения

    Сделайте то чего Вам лично не хватает. Вы либо найдете уже готовое решение, либо сделаете что-то полезное для себя.
    Ответ написан
    2 комментария
  • Python: не работает print в вебе

    По идее print будет выводить результат в stdout Вашего сервера. Но для веба лучше использовать logging (это если реальное приложение):
    import logging
    logging.info('Your message there')
    


    Уверен что print работает отлично (хотя бы пустую строку выводит), если stdout стандартный без перенаправлений.
    Поэтому раскажите какой сервер/фреймворк вы используете. Как запускаете свой сервер. Может глупый вопрос, но результат не выводится в консоль или же на веб страничке?
    Ответ написан
  • Перевод римских чисел в арабские (ошибка в цикле)?

    Используйте enumerate, которая позволит Вам иметь и индекс и значение элемента. Тогда цикл можно записать так:
    for index, literal in enumerate(a):
         pass
    


    Но Вашу задачу я решил бы так:
    #!/usr/bin/env python
    
    rule_add = {
        'I': 1,
        'V': 5,
        'X': 10,
        'L': 50,
        'C': 100,
        'D': 500,
        'M': 1000,
    }
    
    rule_div = {
        ('I', 'V'): 3,
        ('I', 'X'): 8,
        ('X', 'L'): 30,
        ('X', 'C'): 80,
        ('C', 'D'): 300,
        ('C', 'M'): 800,
    }
    
    def roman_to_arabic(roman_number):
        number = 0
        prev_literal = None
        for literal in roman_number:
            if prev_literal and rule_add[prev_literal] < rule_add[literal]:
                number += rule_div[(prev_literal, literal)]
            else:
                number += rule_add[literal]
            prev_literal = literal
        return number
    
    
    
    import unittest
    
    class RomanNumTest(unittest.TestCase):
        def test_roman_num(self):
            self.assertEquals(roman_to_arabic('I'), 1)
            self.assertEquals(roman_to_arabic('II'), 2)
            self.assertEquals(roman_to_arabic('III'), 3)
            self.assertEquals(roman_to_arabic('IV'), 4)
            self.assertEquals(roman_to_arabic('V'), 5)
            self.assertEquals(roman_to_arabic('VI'), 6)
            self.assertEquals(roman_to_arabic('VII'), 7)
            self.assertEquals(roman_to_arabic('VIII'), 8)
            self.assertEquals(roman_to_arabic('IX'), 9)
            self.assertEquals(roman_to_arabic('X'), 10)
            self.assertEquals(roman_to_arabic('XXXI'), 31)
            self.assertEquals(roman_to_arabic('XLVI'), 46)
            self.assertEquals(roman_to_arabic('XCIX'), 99)
            self.assertEquals(roman_to_arabic('DLXXXIII'), 583)
            self.assertEquals(roman_to_arabic('DCCCLXXXVIII'), 888)
            self.assertEquals(roman_to_arabic('MDCLXVIII'), 1668)
            self.assertEquals(roman_to_arabic('MCMLXXXIX'), 1989)
            self.assertEquals(roman_to_arabic('MMX'), 2010)
            self.assertEquals(roman_to_arabic('MMXI'), 2011)
            self.assertEquals(roman_to_arabic('MMXII'), 2012)
            self.assertEquals(roman_to_arabic('MMMCMXCIX'), 3999)
    
    Ответ написан
    2 комментария
  • Cрабатывание element.remove(subelement) в цикле через раз

    Если глянуть в ElementTree.__getitem_(self, index), то можно заметить что с каждой итерацией item в params передается index: первая итерация 0, вторая — 1и дт
        def __getitem__(self, index ):
            return self._children[index]
    

    Но, вы удаляете элементы из param, следовательно:
    при первой итерации у вас первый item, который удалится
    при второй item (который был третим), который удаляется
    выходим из цикла

    Итого у Вас остаются в params два item
    Ответ написан
    1 комментарий
  • Использование Python-кода из Visual Basic?

    Можно также глянуть emler или shed-skin.
    Также нашел интересную статейку на хабре.
    Ответ написан
    Комментировать
  • Оцените кусочек кода

    0. Укажите версию питона.

    1. Узнайте что за исключение кидается except Exception as exception и идите в этом направлении, но у меня просто не находит файл по вводимой строке и пропуская os.path.isdir и os.path.isfile выходит (у вас нет проверки что можно ввести неверное имя файла).
    2. Странно, у меня на венде работает, так что не подскажу.
    3. Нужно пробежаться по всем расширениям и проверить каждое, например если перечислять расширения через запятую.
    any([file_path.endswith(extension) for extension in '.rar,.txt'.split(',')])
    

    4. Почитайте pep8, давайте переменным осмысленные имена, используйте u"%s сконвертирован." % file_path вместо file_path + u" сконвертирован.".
    5. Используйте if __name__ == '__main__':
    6. В функцию converter лучше сразу передавать file_path
    7. Возможно Вам не нужно использовать raw_input, а передавать параметры в виде аргументов (тут поможет sys.argv или argparser)
    8. Вместо print u"-------------------------------" можно писать print u"-" * 20
    9. Лучше добавлять атрибут 'b' в команду open: open(file_path, 'rb') и open(file_path, 'wb')
    Ответ написан
    6 комментариев
  • И все же sscanf в Python — или парсинг простых строк?

    Можете глянуть в сторону pyparsing и похожих утилит по парсингу тескта (синтаксическим анализаторам).
    Ответ написан
    1 комментарий
  • Как в скрипте создать изображение?

    Задаем ответу тип image/png или что другое и возвращаете содержимое Вашей иконки.
    Для того чтобы сгенерировать содержимое Вашей иконки думаю подойдет PIL, но сам с ним не работал.
    Ответ написан
    1 комментарий
  • Как одновременно искать в тексте несколько регулярных выражений?

    Вряд ли есть готовые решения, но ведь можно делать не последовательно, а параллельно, обрабатывая в нескольких процессах/потоках, тк эти операции независимы и хорошо распараллеливаются. Если Вы еще не рассматривали этот вариант, то модуль multiprocessing думаю Вам поможет.

    Если и это будет медленно, можно попробовать переписать на C.
    Ответ написан
    1 комментарий