Ответы пользователя по тегу Python
  • Что значит * перед list?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Это не магия, а преобразование массива в параметры.
    def func(a,b,c)
       print(a,b,c)
    
    a=[1,2,3]
    func(*a)

    Также есть еще одна магия с двумя **.
    Действует как именованные параметры для dict.
    a=dict(a=1,b=2,c=3)
    func(**a)


    Немного добавлю.
    * - оператор раскрытия списка (list) или типла (tuple) в аргументы функции. Последовательность аргументов должна соответствовать последовательности списка.
    ** - оператор раскрытия словаря в именованные аргументы функции.
    Ответ написан
    Комментировать
  • Есть ли способ захватить звук из приложения при помощи python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А операционка какая и через чего программа со звуком работает? Под линуксом достаточно много всего, начиная от jack-audio и заканчивая pulseaudio. И к тому и к тому есть биндинги для питона.
    Другими словами, если программа не пишет напрямую в карточку, а делает это через аудио-сервер, то всегда можно подключиться к аудио-серверу и закоммутировать с него звук на себя.
    Ответ написан
    Комментировать
  • Как в питоне частично записать JSON в CSV?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    А чем не подходит?
    a = output["a"]
    c = output["c"]
    Ответ написан
    Комментировать
  • Пригодится ли мне опыт 1С-программиста в работе (не 1С)-программистом?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Работать (1С например), и параллельно изучать :-)
    Так я выучил сначала Java, будучи эмбеддед-разработчиком (С/asm). А затем и питон, будучи на другом месте java-разработчиком :-)
    Но, я как бы не просто так изучал, а старался применить на практике. Изучение явы начал с написания отладочной программы под яву под винду (благо вообще с виндой не работал) для работы с COM-портами (java-serial).
    С питоном также, нужно было разработать какую-то простую приблуду, которую на питоне было проще решить.
    Ответ написан
    Комментировать
  • Как организовать работу с деньгами в базе данных в python3?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну, опишу, как это обычно делается.
    1) значения хранить только в целочисленном виде, соотвественно, если у вас 11 рублей и 20 копеек, в базе должно лежать 1120.
    2) никогда не храним сумму (баланс)! ее всегда вычисляем разностью по двум колонкам debet - credit = сумма
    3) эти две колонки никогда не растут вниз, только операция прибавления (исключая сторно)
    4) всегда вести лог операций, сохраняя дату, старый дебет, старый кредит, новый дебет, новый кредит, тип операции приход/расход/сторно, текстовая запись(ну еще туда же можно долепить параметры операции кому и по какому поводу)
    5) сторнирующая проводка - в логах помечаем отдельным типом, отнимаем или дебет или кредит.
    Тогда вы всегда можете по логу установить баланс и количество средств на любую операцию. Также всегда можно проконтролировать правильность роста баланса. Ну и в общем, правильная бухгалтерия.

    PS. И да, sqlite тут лучше не пользовать, он почти однопоточный - могут быть большие проблемы с одновременной записью.
    Ответ написан
    2 комментария
  • Почему API не слушает мир?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну он же пишет, что слушает только интерфейс 127.0.0.1
    [2017-09-18 14:31:21 +0300] [10904] [INFO] Listening at: http://127.0.0.1:8000 (10904)

    Вам нужно указать адрес опцией gunicorn --bind 0.0.0.0:8000
    Но лучше воткнуть nginx и через него проксировать на gunicorn 127.0.0.1:8000
    Ответ написан
    Комментировать
  • Как реализовать изменения конфигурационных файлов на удаленных ПК?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Как уже посоветовал DevMan - Ansible!

    У а если желанием именно питон (хотя ansible тоже питон), то есть замечательный инструмент-библиотека fabric - www.fabfile.org
    Плюсы:
    - полный питон
    - простой, как две копейки
    - можно писать сценарии, кторые будут работать со своих триггеров.
    Минусы:
    - прикручивать шаблонизатор придется самому (jinja)
    - только python2
    - нет комплексного подхода как в ансибле
    - в больших и комплексных проектах очень разрастается код.
    - нет библиотеки компонентов на все случаи, все приходится писать самим

    Как пример, у меня есть пара сотер машин с ubuntu, которые выходят на связь время от времени и устанавливают VPN. В тот момент, когда устанавливается VPN, я через fabric на них копирую новые расписания работы и доставляю небольшие обновления.

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

    Ну а если нужно комплексно управлять системами - ansible. Это когда из например удаленно нужно из сервера LAMP превратиться в сервер ELTK, со всеми зависимостями, установкой пакетов, добавление пользователей и прочей дребеденью :-)
    Ответ написан
    Комментировать
  • Как реализовать параллельный процесс с возможностью прерывания изнутри?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Так как в питоне есть gil, то любой обект как бы тредонезависимый. Воспользуйтесь https://docs.python.org/3/library/collections.html... и считайте свои подтвержденные значения. После 25 останавливайте.
    Ответ написан
    Комментировать
  • Как сделать сравнение ряда цифр на Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Upd... Убрал лямбду.. Исправился. Спасибо longclaps
    Анально, в две строки (нет, фактически в одну)...

    Берем отсортированный массив со второго элемента, и редусим его в выходной массив из первого элемента...

    s = sorted(list("32854"))
    def f(res, x):
       if int(x) - int(res[-1]) == 1:
         return res+[x]
       elif len(res) > 1:
         return res
       else:
         return [x]
    ret = reduce(f, s[1:], [s[0]])
    
    # напечатаем резалт
    if len(ret) > 1:
       print('Yes', ret)
    
    ### ('Yes', ['2', '3', '4', '5'])
    Ответ написан
  • Как создать xml в памяти, прикрепить его к json и отправить?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    >>> from xml.etree import ElementTree as ET
    >>> root = ET.Element("root")
    >>> ET.SubElement(root, 'b')
    >>> ET.SubElement(root, 'a')
    >>> ET.SubElement(root, 'c')
    >>> ET.tostring(root)
    '<root><b /><a /><c /></root>'
    Ответ написан
    Комментировать
  • Классы и объекты в python, self?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Так как по некоторым причинам в питоне нет контекстов и областей видимости, то функции-классов нужно передавать в явном виде ссылку на экземпляр объекта, которая и передается первым аргументом в качестве self.
    Собственно, сами классы в питоне организованы через великий dict!
    >>> class T():
    ...  def a(self):
    ...     print self.test
    ... 
    >>> a = T()
    >>> a.test =1
    >>> b= T()
    >>> b.test =2
    >>> a.a()
    1
    >>> b.a()
    2
    >>> T.a(b)
    2
    >>> T.a(a)
    1
    Ответ написан
    3 комментария
  • Каким образом выполнить множественную замену строк в файле?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Сильно не улучшить: но
    def editapache(self,replacements):
          with open(filename,'r+') as config:
            for _from,_to in replacements:
                config.replace(_from,_to)
        config.write(config)
    
    
    ....
    editapache(self,[(oldcharset,charset),(oldmail,mail),(oldname,name),("oldstring","newstring")])


    А вообще-то лучше использовать темплейты и генерировать когфигурацию из них. Посоветую например "нинзя2" - jinja.pocoo.org/docs/2.9
    А еще лучше, возьмите ansible например, в нем и jinja2 в качестве шаблонизатора в комплекте :-)
    Ответ написан
    Комментировать
  • (Python) Почему не работает условие?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Вообще-то лучше так не извращаться, а использовать CSRF для джанги (у вас же джанга?)- https://djbook.ru/rel1.7/ref/contrib/csrf.html
    Ну и если поле не задано, то должно возвращать None, проверьте на это значение.
    Ответ написан
    Комментировать
  • Какие библиотеки использовать для работы с группой файлов Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Для работы с группой файлов последнее время использую https://docs.python.org/3/library/pathlib.html
    Для вытаскивания информации из html рекомендую - lxml.de
    Вот статья на тему - https://habrahabr.ru/post/220125/ (pandas скорее всего вам не понадобится)
    Если есть вопросы - задавайте.
    Ответ написан
    Комментировать
  • Получение данных на сервере python (socket)?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Вы биндитесь на порт 80, на котором, похоже, у вас уже работает web-сервер. Поэтому у вас bind вылетает с ошибкой. Или поменяйте номер порта в вашем скрипте, или остановите веб-сервер.
    И что значит "callback к к моему серверу"?!
    Если вы пытаетесь из существующего веб-сервера вызвать питоновский скрипт, то бинд вам совсем не нужен, а нужно что-то типа cgi/wsgi или proxy... Но чтобы сказать точнее, нужно знать, что из себя этот ваш веб-сервер представляет, и что у него за callback api.
    Ответ написан
    5 комментариев
  • Где можно найти полный мануал для curses в Python?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    В общем, расскажу свой опыт.
    Пробовал использовать curses в питон - долго, дорого, мучительно, больно. Это совсем не python-way, увы. Я писал на curces + termlib во времена суровых зеленых терминалов на C, но и другого практически не было.
    Пробовал urwid - быстро, дешево, непрактично. Фреймворк в основном заточен на создание редакторов, отсюда есть некоторые проблемы с написанием меню-ориентированных интерфейсов. Написал на нем несколько TUI для конфигурирования.
    В результате остановился на - WEB. На питоне, например на cyclone.io, интерфейс создается за 1-3 дня для любой сложной конфигурации.
    Единственный скрипт, которые нужен именно в консоли - восстановление конфигурации по умолчанию.

    В общем рекомендую так и поступать, делайте web-конфигурилку на cyclone.io или на aiohttp.readthedocs.io . В консоли же делайте только восстановление конфигурации по умолчанию.

    Ну, или используйте urwid...

    PS. И да, на русском информации очень мало, дибо она очень старая.
    Учите язык.
    Ответ написан
  • Python Как исправить кодировку в файле для JSON?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Месяц назад тоже разбирался - https://stackoverflow.com/questions/13156395/pytho...
    Но на самом деле просто сохраняйте json в правльном UTF-8.
    Ответ написан
    Комментировать
  • Как в Python сделать скачивание генерируемого файла?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Возьмите любую интерпретацию web-сервера на питоне и отдавайте формируемый файл через него.
    Например через aiohttp (проверил, рабочий)
    from aiohttp import web
    from concurrent.futures import ThreadPoolExecutor
    import xml.etree.ElementTree as ElementTree
    
    def get_xml():
        root = ElementTree.Element('root')
        b = ElementTree.SubElement(root, 'b')
        c = ElementTree.SubElement(root, 'c')
        d = ElementTree.SubElement(root, 'd')
    
        xmlstr = ElementTree.tostring(root, encoding='utf8', method='xml')
        return xmlstr
    
    async def handle(request):
        with ThreadPoolExecutor() as executor:
            xmlstr = await request.app.loop.run_in_executor(executor, get_xml)
        return web.Response(body=xmlstr, content_type="text/xml")
    
    app = web.Application()
    app.router.add_get('/', handle)
    
    web.run_app(app, port=8080)
    Ответ написан
    Комментировать
  • Как узнать число запущенных потоков?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Нет, это не очень хорошо. Вам желательно использовать легкие (green) треды и/или event pool. Иначе, при большом количестве клиентов уткнетесь в ограничения по количеству тредов.
    Посмотрите на асинхронные библиотеки типа aiohttp или twisted cyclone.io.
    Ответ написан
    4 комментария