λ
Из стековерфлоу 😊
Alex
Из стековерфлоу 😊
эм... дай угадаю MongoInstance у тебя это singleton()?
λ
Черд, таки да. Тут и угадывать не нужно… >_<
Alex
@Tishka17 давай в голос хором лекцию о том что signleton это плохо
λ
Сам себе злой… 🤪
Alex
а такая имплементация еще хуже
Alex
главный вопрос "нахуя"?
Tishka17
синглтон - это плохо
Alex
в смысле на зачем для этого еще и отдельную функцию пилить
Alex
объекты уровня модуля по сути своей являются синглтонами
Alex
но синглтон это все равно плохо
λ
в смысле на зачем для этого еще и отдельную функцию пилить
Это был самый простой и безболезненный способ на тот момент
Alex
Уже уничтожил 😉
ты просто патчить пытался ф-цию
λ
Я уже понял. А у нее конечно нету get_status. Функция возвращала инстанс у которого он есть, но это же нужно ее выполнить… =)
λ
Ооо теперь все красиво. Спасибо 👍
Denis
Может сталкивался кто. Есть скрипт, который тянет данные из бд и отправляет их по почте. Скрипт работает корректно, но не могу запустить его с помощью планировщика задания Windows
Sasha
Смотреть надо как вызывается, пути и под каким пользователем.
Denis
А в чём проблема?
почему-то не создает файл excel и не отправляет соответственно ничего
Denis
пути корректные
Denis
даже попробовал создать cmd файл туда прописал python "C:\Python Scripts\Bonus + TO.py" и его на запуск
Userfriendly
В правильно поставленом вопросе содержиться 50% ответа
Sasha
Ошибки то скедулер пишет какие то?
Sasha
Вывод скрипта посмотреть, может не та рабочая директория в скедулере указана.
Denis
А по какому пути он его создаёт?
там же где скрипт лежит
Denis
Tishka17
там же где скрипт лежит
Прям так и написано в коде? "там где скрипт лежит"?
Anonymous
Добрый день. Можете помочь, почему данная программа работает: from selenium import webdriver driver = webdriver.Chrome("/home/fruity/hh/73/chromedriver") А если пытаюсь добавить опции: from selenium import webdriver options = webdriver.ChromeOptions() options.binary_location ="/home/fruity/hh/73/chromedriver" driver = webdriver.Chrome(chrome_options=options) выдает selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /home/fruity/hh/73/chromedriver is no longer running, so ChromeDriver is assuming that Chrome has crashed.) (Driver info: chromedriver=74.0.3729.169 (78e4f8db3ce38f6c26cf56eed7ae9b331fc67ada-refs/branch-heads/3729@{#1013}),platform=Linux 4.15.0-51-generic x86_64)
Ser
какая ос?
дело в том что на например на минте хромдрайвер не работает, там какаято хрень с запуском приложений в режиме сандбокс, при этом абсолютно тот же самый скрипт но на убунту из коробки взлетает вообще без бубна, и там как раз гугл говорит на тему того что нужно понизить версию хромдрайвера, поиграться с настройками и тп
Anonymous
Anonymous
да дело в том, что у меня до 31 мая работал этот скрипт (обновляет резюме HH) а теперь (подсле апгрейда системы перестал работать с chrome 74)
Ser
попробуй другую версию хромдрайвера, я так и не смог на минте это запустить, тк все равно дело было в виртуалке быстрее и проще накатил убунту разные версии приложения, параметры —no-sandbox, еще там что-то, перенос исполняемого файла, права на запуск разным пользователям, ничего не помогло в итоге
Kairat
dt = dateutil.parser.parse('2012-05-29T19:30:03.283Z') dt.strftime('%H:%M / %d %B') выдает '19:30 / 29 May'. не могу понять как сделать чтоб на русском было май месяц
Kairat
ну вот как? куда капать ?
Alex
ну вот как? куда капать ?
https://docs.python.org/3.7/library/locale.html#locale.setlocale
Anonymous
Помогите с кодом
Tigran
кубрик в треде, посоны
Dmytro
Помогите с кодом
Кидать код в видео это новый уровень
Anonymous
Anonymous
''' def OrderBookBuy(): pos = client.OrderBook.OrderBook_getL2(symbol=valuta,depth = stakan).result() price=0 for i in pos[0]: if i['side'] == 'Buy': pass time.sleep(0.7) return pos '''
Dmytro
Не знаю как другим, мне лень смотреть минутное видео на телефоне, где ничего не видно
Anonymous
нужно из json найти блок с самым большим значением size и взять из него значение price """ ([{'symbol': 'XBTUSD', 'id': 8799170350, 'side': 'Sell', 'size': 66560, 'price': 8296.5}, {'symbol': 'XBTUSD', 'id': 8799170400, 'side': 'Sell', 'size': 128367, 'price': 8296.0}, {'symbol': 'XBTUSD', 'id': 8799170450, 'side': 'Sell', 'size': 47627, 'price': 8295.5}, {'symbol': 'XBTUSD', 'id': 8799170500, 'side': 'Sell', 'size': 70694, 'price': 8295.0}, {'symbol': 'XBTUSD', 'id': 8799170550, 'side': 'Sell', 'size': 24344, 'price': 8294.5}, {'symbol': 'XBTUSD', 'id': 8799170600, 'side': 'Sell', 'size': 30081, 'price': 8294.0}, {'symbol': 'XBTUSD', 'id': 8799170650, 'side': 'Sell', 'size': 67299, 'price': 8293.5}, {'symbol': 'XBTUSD', 'id': 8799170700, 'side': 'Sell', 'size': 2315311, 'price': 8293.0}, {'symbol': 'XBTUSD', 'id': 8799170750, 'side': 'Sell', 'size': 96649, 'price': 8292.5}, {'symbol': 'XBTUSD', 'id': 8799170800, 'side': 'Sell', 'size': 2357864, 'price': 8292.0}, {'symbol': 'XBTUSD', 'id': 8799170850, 'side': 'Buy', 'size': 484126, 'price': 8291.5}, {'symbol': 'XBTUSD', 'id': 8799170900, 'side': 'Buy', 'size': 33688, 'price': 8291.0}, {'symbol': 'XBTUSD', 'id': 8799170950, 'side': 'Buy', 'size': 3286, 'price': 8290.5}, {'symbol': 'XBTUSD', 'id': 8799171000, 'side': 'Buy', 'size': 104495, 'price': 8290.0}, {'symbol': 'XBTUSD', 'id': 8799171050, 'side': 'Buy', 'size': 11692, 'price': 8289.5}, {'symbol': 'XBTUSD', 'id': 8799171100, 'side': 'Buy', 'size': 1325, 'price': 8289.0}, {'symbol': 'XBTUSD', 'id': 8799171150, 'side': 'Buy', 'size': 63438, 'price': 8288.5}, {'symbol': 'XBTUSD', 'id': 8799171200, 'side': 'Buy', 'size': 9362, 'price': 8288.0}, {'symbol': 'XBTUSD', 'id': 8799171250, 'side': 'Buy', 'size': 9267, 'price': 8287.5}, {'symbol': 'XBTUSD', 'id': 8799171300, 'side': 'Buy', 'size': 137329, 'price': 8287.0}], <bravado.requests_client.RequestsResponseAdapter object at 0x000001E8B296FD68>) """
Проксимов
кубрик в треде, посоны
Люблю твои комменты
koder
Это что бы понятнее было
Это что бы тебе лень текст писать было
Tishka17
нужно из json найти блок с самым большим значением size и взять из него значение price """ ([{'symbol': 'XBTUSD', 'id': 8799170350, 'side': 'Sell', 'size': 66560, 'price': 8296.5}, {'symbol': 'XBTUSD', 'id': 8799170400, 'side': 'Sell', 'size': 128367, 'price': 8296.0}, {'symbol': 'XBTUSD', 'id': 8799170450, 'side': 'Sell', 'size': 47627, 'price': 8295.5}, {'symbol': 'XBTUSD', 'id': 8799170500, 'side': 'Sell', 'size': 70694, 'price': 8295.0}, {'symbol': 'XBTUSD', 'id': 8799170550, 'side': 'Sell', 'size': 24344, 'price': 8294.5}, {'symbol': 'XBTUSD', 'id': 8799170600, 'side': 'Sell', 'size': 30081, 'price': 8294.0}, {'symbol': 'XBTUSD', 'id': 8799170650, 'side': 'Sell', 'size': 67299, 'price': 8293.5}, {'symbol': 'XBTUSD', 'id': 8799170700, 'side': 'Sell', 'size': 2315311, 'price': 8293.0}, {'symbol': 'XBTUSD', 'id': 8799170750, 'side': 'Sell', 'size': 96649, 'price': 8292.5}, {'symbol': 'XBTUSD', 'id': 8799170800, 'side': 'Sell', 'size': 2357864, 'price': 8292.0}, {'symbol': 'XBTUSD', 'id': 8799170850, 'side': 'Buy', 'size': 484126, 'price': 8291.5}, {'symbol': 'XBTUSD', 'id': 8799170900, 'side': 'Buy', 'size': 33688, 'price': 8291.0}, {'symbol': 'XBTUSD', 'id': 8799170950, 'side': 'Buy', 'size': 3286, 'price': 8290.5}, {'symbol': 'XBTUSD', 'id': 8799171000, 'side': 'Buy', 'size': 104495, 'price': 8290.0}, {'symbol': 'XBTUSD', 'id': 8799171050, 'side': 'Buy', 'size': 11692, 'price': 8289.5}, {'symbol': 'XBTUSD', 'id': 8799171100, 'side': 'Buy', 'size': 1325, 'price': 8289.0}, {'symbol': 'XBTUSD', 'id': 8799171150, 'side': 'Buy', 'size': 63438, 'price': 8288.5}, {'symbol': 'XBTUSD', 'id': 8799171200, 'side': 'Buy', 'size': 9362, 'price': 8288.0}, {'symbol': 'XBTUSD', 'id': 8799171250, 'side': 'Buy', 'size': 9267, 'price': 8287.5}, {'symbol': 'XBTUSD', 'id': 8799171300, 'side': 'Buy', 'size': 137329, 'price': 8287.0}], <bravado.requests_client.RequestsResponseAdapter object at 0x000001E8B296FD68>) """
ты кажется, пропустил лекцию про циклы
Dmytro
нужно из json найти блок с самым большим значением size и взять из него значение price """ ([{'symbol': 'XBTUSD', 'id': 8799170350, 'side': 'Sell', 'size': 66560, 'price': 8296.5}, {'symbol': 'XBTUSD', 'id': 8799170400, 'side': 'Sell', 'size': 128367, 'price': 8296.0}, {'symbol': 'XBTUSD', 'id': 8799170450, 'side': 'Sell', 'size': 47627, 'price': 8295.5}, {'symbol': 'XBTUSD', 'id': 8799170500, 'side': 'Sell', 'size': 70694, 'price': 8295.0}, {'symbol': 'XBTUSD', 'id': 8799170550, 'side': 'Sell', 'size': 24344, 'price': 8294.5}, {'symbol': 'XBTUSD', 'id': 8799170600, 'side': 'Sell', 'size': 30081, 'price': 8294.0}, {'symbol': 'XBTUSD', 'id': 8799170650, 'side': 'Sell', 'size': 67299, 'price': 8293.5}, {'symbol': 'XBTUSD', 'id': 8799170700, 'side': 'Sell', 'size': 2315311, 'price': 8293.0}, {'symbol': 'XBTUSD', 'id': 8799170750, 'side': 'Sell', 'size': 96649, 'price': 8292.5}, {'symbol': 'XBTUSD', 'id': 8799170800, 'side': 'Sell', 'size': 2357864, 'price': 8292.0}, {'symbol': 'XBTUSD', 'id': 8799170850, 'side': 'Buy', 'size': 484126, 'price': 8291.5}, {'symbol': 'XBTUSD', 'id': 8799170900, 'side': 'Buy', 'size': 33688, 'price': 8291.0}, {'symbol': 'XBTUSD', 'id': 8799170950, 'side': 'Buy', 'size': 3286, 'price': 8290.5}, {'symbol': 'XBTUSD', 'id': 8799171000, 'side': 'Buy', 'size': 104495, 'price': 8290.0}, {'symbol': 'XBTUSD', 'id': 8799171050, 'side': 'Buy', 'size': 11692, 'price': 8289.5}, {'symbol': 'XBTUSD', 'id': 8799171100, 'side': 'Buy', 'size': 1325, 'price': 8289.0}, {'symbol': 'XBTUSD', 'id': 8799171150, 'side': 'Buy', 'size': 63438, 'price': 8288.5}, {'symbol': 'XBTUSD', 'id': 8799171200, 'side': 'Buy', 'size': 9362, 'price': 8288.0}, {'symbol': 'XBTUSD', 'id': 8799171250, 'side': 'Buy', 'size': 9267, 'price': 8287.5}, {'symbol': 'XBTUSD', 'id': 8799171300, 'side': 'Buy', 'size': 137329, 'price': 8287.0}], <bravado.requests_client.RequestsResponseAdapter object at 0x000001E8B296FD68>) """
Как мы должны это разобрать? Можно кинуть один словарь, с нормальным расположением - в одной строчке один ключ-значение?
Проксимов
нужно из json найти блок с самым большим значением size и взять из него значение price """ ([{'symbol': 'XBTUSD', 'id': 8799170350, 'side': 'Sell', 'size': 66560, 'price': 8296.5}, {'symbol': 'XBTUSD', 'id': 8799170400, 'side': 'Sell', 'size': 128367, 'price': 8296.0}, {'symbol': 'XBTUSD', 'id': 8799170450, 'side': 'Sell', 'size': 47627, 'price': 8295.5}, {'symbol': 'XBTUSD', 'id': 8799170500, 'side': 'Sell', 'size': 70694, 'price': 8295.0}, {'symbol': 'XBTUSD', 'id': 8799170550, 'side': 'Sell', 'size': 24344, 'price': 8294.5}, {'symbol': 'XBTUSD', 'id': 8799170600, 'side': 'Sell', 'size': 30081, 'price': 8294.0}, {'symbol': 'XBTUSD', 'id': 8799170650, 'side': 'Sell', 'size': 67299, 'price': 8293.5}, {'symbol': 'XBTUSD', 'id': 8799170700, 'side': 'Sell', 'size': 2315311, 'price': 8293.0}, {'symbol': 'XBTUSD', 'id': 8799170750, 'side': 'Sell', 'size': 96649, 'price': 8292.5}, {'symbol': 'XBTUSD', 'id': 8799170800, 'side': 'Sell', 'size': 2357864, 'price': 8292.0}, {'symbol': 'XBTUSD', 'id': 8799170850, 'side': 'Buy', 'size': 484126, 'price': 8291.5}, {'symbol': 'XBTUSD', 'id': 8799170900, 'side': 'Buy', 'size': 33688, 'price': 8291.0}, {'symbol': 'XBTUSD', 'id': 8799170950, 'side': 'Buy', 'size': 3286, 'price': 8290.5}, {'symbol': 'XBTUSD', 'id': 8799171000, 'side': 'Buy', 'size': 104495, 'price': 8290.0}, {'symbol': 'XBTUSD', 'id': 8799171050, 'side': 'Buy', 'size': 11692, 'price': 8289.5}, {'symbol': 'XBTUSD', 'id': 8799171100, 'side': 'Buy', 'size': 1325, 'price': 8289.0}, {'symbol': 'XBTUSD', 'id': 8799171150, 'side': 'Buy', 'size': 63438, 'price': 8288.5}, {'symbol': 'XBTUSD', 'id': 8799171200, 'side': 'Buy', 'size': 9362, 'price': 8288.0}, {'symbol': 'XBTUSD', 'id': 8799171250, 'side': 'Buy', 'size': 9267, 'price': 8287.5}, {'symbol': 'XBTUSD', 'id': 8799171300, 'side': 'Buy', 'size': 137329, 'price': 8287.0}], <bravado.requests_client.RequestsResponseAdapter object at 0x000001E8B296FD68>) """
Находишь все блоки, сортируешь по size, берёшь size в первом, в чём проблема
Dmytro
нужно из json найти блок с самым большим значением size и взять из него значение price """ ([{'symbol': 'XBTUSD', 'id': 8799170350, 'side': 'Sell', 'size': 66560, 'price': 8296.5}, {'symbol': 'XBTUSD', 'id': 8799170400, 'side': 'Sell', 'size': 128367, 'price': 8296.0}, {'symbol': 'XBTUSD', 'id': 8799170450, 'side': 'Sell', 'size': 47627, 'price': 8295.5}, {'symbol': 'XBTUSD', 'id': 8799170500, 'side': 'Sell', 'size': 70694, 'price': 8295.0}, {'symbol': 'XBTUSD', 'id': 8799170550, 'side': 'Sell', 'size': 24344, 'price': 8294.5}, {'symbol': 'XBTUSD', 'id': 8799170600, 'side': 'Sell', 'size': 30081, 'price': 8294.0}, {'symbol': 'XBTUSD', 'id': 8799170650, 'side': 'Sell', 'size': 67299, 'price': 8293.5}, {'symbol': 'XBTUSD', 'id': 8799170700, 'side': 'Sell', 'size': 2315311, 'price': 8293.0}, {'symbol': 'XBTUSD', 'id': 8799170750, 'side': 'Sell', 'size': 96649, 'price': 8292.5}, {'symbol': 'XBTUSD', 'id': 8799170800, 'side': 'Sell', 'size': 2357864, 'price': 8292.0}, {'symbol': 'XBTUSD', 'id': 8799170850, 'side': 'Buy', 'size': 484126, 'price': 8291.5}, {'symbol': 'XBTUSD', 'id': 8799170900, 'side': 'Buy', 'size': 33688, 'price': 8291.0}, {'symbol': 'XBTUSD', 'id': 8799170950, 'side': 'Buy', 'size': 3286, 'price': 8290.5}, {'symbol': 'XBTUSD', 'id': 8799171000, 'side': 'Buy', 'size': 104495, 'price': 8290.0}, {'symbol': 'XBTUSD', 'id': 8799171050, 'side': 'Buy', 'size': 11692, 'price': 8289.5}, {'symbol': 'XBTUSD', 'id': 8799171100, 'side': 'Buy', 'size': 1325, 'price': 8289.0}, {'symbol': 'XBTUSD', 'id': 8799171150, 'side': 'Buy', 'size': 63438, 'price': 8288.5}, {'symbol': 'XBTUSD', 'id': 8799171200, 'side': 'Buy', 'size': 9362, 'price': 8288.0}, {'symbol': 'XBTUSD', 'id': 8799171250, 'side': 'Buy', 'size': 9267, 'price': 8287.5}, {'symbol': 'XBTUSD', 'id': 8799171300, 'side': 'Buy', 'size': 137329, 'price': 8287.0}], <bravado.requests_client.RequestsResponseAdapter object at 0x000001E8B296FD68>) """
@ru_python_beginers
Dmytro
Ля
Dmytro
Anonymous
Dmytro
Ща дам рабочую ссылку
Dmytro
@ru_python_beginners
Dmytro
Интересно, быстрее сработает собственноручной цикл, или max? По идеи второй должен?
Artyem
Интересно, быстрее сработает собственноручной цикл, или max? По идеи второй должен?
не факт, в случае max, придётся каждый раз вызывать функцию, что медленнее чем сравнение двух чисел. а в целом пофиг. вот то что строчек меньше, ЭТА ВАЖНА!
Sergey
Здравствуйте. Скажите, вы распознаванием текста паспортов занимались? Сканы страниц на вход подаются очень часто с нарушением порядка и с неприятным вращением: нужео как-то разобраться с этим перед распознаванием структурированных блоков.
Sergey
Потому что темплейт структуры зависит от номера страницы, а номер страницы надо как-то сначала распознать.
Sergey
Можно нейронку жахнуть, но это, кажется, оверкилл для этой ситуации - должно быть более простое решение, которого я не вижу.
Андрей
Модно Опен св взять
Михаил
В openCV вроде есть встроенное средство которое центрирует изображение, к примеру, то есть вращает
Sergey
В openCV вроде есть встроенное средство которое центрирует изображение, к примеру, то есть вращает
Я уже и так опенсв используюю Тут проблема в том, что некоторые страницы могут (но не всегда) быть расположены горизонтально - например, основной разворот паспорта с фотографией. Центрирование вертикально этот разворот не повернет, а повернуть его мне кажется обязательным для распознавания текста.
Sergey
используй https://pypi.org/project/pytesseract/
Уже под него и разрабатываю.
Sergey
Всем привет. Есть база на MSSQL, в ней таблицы не очень большие, но и совсем маленькими не назовёшь 50.000 - 1.000.000 записей. Задача каждую ночь копировать содержимое в другой сервис (там база на постгре). Перезаливать таблицы целиком не очень хочется, т.к. их дофига и много больших текстовых полей, т.е. объём данных достаточно большой. Сравнивать построчно - адов ад, проще перезалить целиком. Есть какой-то лайф-хак, как можно обновлять только строчки, содержимое которых отличается в оригинале от копии? Сервис в который надо копировать на django, ось - Centos 7.5 Оригинал базы живёт на Windows server. Подскажите пожалустаб в какую сторону думать?
Свободный
Уже под него и разрабатываю.
метод image_to_data возвращает координаты текста по отношению к фото, почитайте про него больше.
Anonymous
Никто pass и break не перепутал?
В результате не кто помочь не может, через функцию map() тоне понятно как сделать