Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы: https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации https://dumpz.org/ - можно постить листинги, не требует регистрации https://pastebin.com/ - для листингов, регистрация не обязательна https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
Вопросы-ответы: — А стоит ли читать Лутца, том номер N? Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х? Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать? Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Как можно без лишней возни ускорить программу на питоне 1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь. 2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником. Исходник: https://dumpz.org/bASGKD8cCFDf
Дали задание протестировать Java код на питоне: посмотреть, заполнен ли массив, используется ли цикл и тд. В голову приходит только взять исходный код на жаве, и добавить в конце assertы на заполненность и все такое, но я не могу же таким образом проверить использования цикла, например. Для проверки на тест-кейсах есть простейший баш-скрипт, а как именно проверять код, я не могу понять. Мб кто-то сталкивался или шарит, как это можно удобно организовать?
Анон, пишу скрипт, который должен работать под виндой и линуксом, и тут у меня операции с директориями. Проблема в том, что в винде слеши обратные, а в линуксе - прямые. Как мне учесть этот момент? Я не хочу переписывать весь свой код два раза для if os == 'winda': и elif os == 'linux'. Обрабатывать такие штуки надо в ситуациях типа with open('templates/folder/file.txt', 'r') as file
Привет. Может кто-то адаптировать или показать как это делается в асинронном режиме? Какие плюсы по сравнению с этим трелингом? for thread in threads: ....thread.start() for thread in threads: ....thread.join()
>>2004227 http://pythontutor.com/visualize.html#mode=edit Если зайти на pythontutor.ru, то там базовый курс питона с использованием этого визуализатора Но нужно понимать, что на телефоне невозможно программировать нормально, это сложнее и в разы дольше, чем на компе
>>2004249 Спасиб, попробую. Но обычно у приложух сильные ограничения функционала, модули там не поддерживаются какие-то, еще что-то. Надеюсь для моих задач хватит. Спасибо.
>>2004265 Если хочешь почти как комп, то можно скачать Termux. Андроид построен на основе линукса, поэтому можно сюда поставить питон и ставить нужные модули туда
Сап программач. Предлагаю вам посмотреть на самое ебанутое задание. Хохлы хули
Степан любит много смеяться. Смех-это последовательность букв " a " и "h", которые чередуются. Так например, «ahahaha», «hah» и «a» являются смехом, а «abacaba» и «hh» - Нет. Степан разговаривает очень быстро, поэтому все его слова сливаются в одно большое. Для исследования вам нужно выяснить, как долго он может смеяться. В вас есть строка-запись разговора Степана. Определите наибольшую длину смеха в этой разговоре. Входные данные: Первая строка входного файла содержит одно натуральное число N (1 ≤ N ≤ 105 ) - длина строки с разговором Степана. Во второй строке содержится строка из маленьких латинских букв длиной N-запись разговора Степана. Исходные данные: В исходный файл выведите одно число-наибольшую длину смеха в разговоре Степана.
Кто-то вообще понимает, что это за пиздец? Пробовал второй пик, меня послало нахуй.
>>2004503 Какие же хохлы дегенераты... Приятнее всего воспользоваться re.findall и взять max len от полученного списка. Ну или цикл по строке с двумя переменными, где одна переменная это длина текущего хи-хи, а вторая это максимальная длина хи-хи, код писать я разумеется не буду.
>>2004515 Да я вроде посчитал эти хихи-хаха через цикл, но был послан нахуй. Может я туплю и здесь нет правильного овтета, ибо я не выкупаю, откуда там берутся такие цифры
>>2004518 Ой, чел, там ещё и чередование букв надо учитывать, aaaa и hhhh не считаются смехом. Ну тогда вариант с изящной регуляркой отпадает и остаётся только цикл со сложными условиями. Крепись, чел.
>>2004564 Проблема их формулировки в том, что по ней "аа" можно трактовать как чередование "а" и "а". В этом задании не мешало бы эксплицитно исключить "аа" так, как это было сделано с "hh".
>>2004577 Ты не забывай про ограничение на время и N до 100k - лупы в пайтоне не самые быстрые. Через регексы наверняка быстрее было бы. Пикрелейтед, если c исключением "aa"/"hh".
Сап двощ, начал осваивать Лутца, и там грится, что условный блок кода, который не вложен в оператор if должен хуяриться слева без отступа. Собсна, почему в моем охуенном коде если я въебываю четыре пробела перед блоком кода, который не вложен я про print('block0'), то все заебись работает, а если удаляю отступы, и хуярю его без отступа, то выдает исключение?
>>2004848 Потому что в интерактивном режиме ты вводишь по одной конструкции. В твоем случае верхний if x это начало, и всё остальное вводится уже внутри, так что принт на том же уровне и дает ошибку В обычном шелле это обозначается ..., у тебя что-то не видно.
У меня есть неделя, чтобы написать веб-приложение, которое дёргает из сторонней bi-системы данные, выводит их на странице в виде таблицы, с возможностью фильтрации и редактирования. Пакет, который данные по рест апи дёргает данные уже есть. Как остальное запилить? Нужна ли тут джанга? Имхо нет, т.к. данные не имеет смысла хранить в бд приложения, если всё равно каждый раз их надо тянуть из бд bi. Что тогда использовать, фласк? Как реализовать табличную форму и возможность редактирования (типа как в гугел шытс)?
>>2004923 Если следовать твоей логике, то джанга только если есть бд, а если взять фласк, то нельзя использовать бд. Ни тебе здрасьте, ни до свидания. Нам за тебя тестовое задание сделать, черт?
Анон, а как можно отсортировать вот такой список? ['2: string2', '1: string ', '3: string3'] там хранятся строчки, но каждая из них начинается с числа, по которому и нужно сделать сортировку.
>>2004659 Интересно - оказалось, пайтоновские лупы уделываются даже вот такой нестед елдой, как на пикрелейтед: две лябмды, re, sorted, filter. При этом по памяти приблизительно одинаково.
>>2004604 Почему старт от 1? Эта хуйня разве не пропустит одиночные a h? Что значат ?!< в начале круглых скобок? В обоих случаях, там разные комбинации.
>>2005026 Поиск в ре сишный, он высирает готовые результаты, а фильтры уже только по ним. Хотя это питонья реализация какая-то унылая. Скинь-ка это всё текстом, я потыкаю.
>>2005050 > Почему старт от 1? > Что значат ?!< Можешь здесь это всё почитать: regex101.com А там регекс забагованный, пришлось вилкой чистить. То решение через лупы тоже забагованное, поэтому этот код не смотри особо.
Как правильней будет сделать какое-то действие после создании модели в Джанге? По сути я могу описать логику в сериализаторе, овверайднув метод create(), так же могу овверайднуть create во вьюхе, перезаписать save() в модели или создать post_save в сигналах. Всё будет работать одинаково, но что является лучшим вариантом?
>>2003913 (OP) Пытаюсь тут обновить одну таблицу в postgres (а точнее поле json), но при попытках обновиться эта падла мне часто ругается на знак "%" - это, якобы это "unsopported format character" - втф? С хера ли % не может быть внутри полей бля?
до кучи добавлю, что я вытаскиваю уже готовое поле где присутствует % (!) но когда обновляю его через sqlalchemy то postgres усирается
>>2005091 Что код-то? Ничего он не покажет, дело как и сказали аноны в конченной интерпретации символа % (который уже есть в json, я на это повлиять не могу, нельзя просто "избегать символа %") Вопрос в том как его верно экранировать? Перед проведением UPDATE проверить всю строку json и напихать туда _ или \ ? хз
>>2005101 >Ничего он не покажет Скорее всего покажет, что ты манипулируешь с базой через три пизды вместо того, чтобы сделать апдейт. Попробуй заменить все % на chr() от ascii кода %
update_query_start = f'''UPDATE chatvisitor as cv SET json = v.js FROM (VALUES ''' update_query_end = ''') AS v(id, js) WHERE v.id = cv.visitorid''' to_update_values = [] # some values here vals_query = ','.join(to_update_values) whole_query = ''.join([update_query_start, vals_query, update_query_end])
Сильно помогло? Это небольшой кусок непосредственно при добавлении в БД, если закину весь код там будет куча оверхеда, явно ненужного здесь Вкратце: обновляю базу с 2.5 млн записей, заранее беру все записи через SELECT а потом начинаю делать UPDATE, обработав json-поле нужным образом. Почем вот так вот объединяю строки? Потому что это butch-update, тут разом 100к значений будет, потому что если обновлять их поштучно то можно усраться как долго он это будет делать
>>2005119 Можешь прогнать эти значения через prepared statement и глянуть, что он с ними делает. Ну и в целом в либе должны быть функции для обработки, читай доки.
>>2005105>>2005116 Кстати интересное наблюдение: предварительно пробовал конкурентно гонять скрипт на тестовой базе. При асинхронном варианте через asyncio.gather обосрался на 50% по производительности по сравнению с поштучным синхронным, при мультитрединговом варианте через ThreadPoolExecutor обосрался на 40% (потому что сам постгрес лочит таблицу при таких обновлениях и конкурентно ничего не исполняется)
Анонасы есть кто в тредике живой? Я жуниор жуниоров и у меня быдлокод не выходит. Пара вопросов есть, был бы очень благодарен если бы кто подсказал(указал) на мои ошибки. Код сюда кидать не буду слишком стыдно за высер
Прошу прощения за глупый вопрос, но подскажите, что тут не так? Вроде всё честно запрогано. (В устройстве функции разбираться не нужно, гляньте только на передачу аргументов) Заранее спасибо.
>>2005128 Стыдно потому что эта двач нахуй. /pr/ один из самых токсичных бордов здесь. Даже /po/ и /re/ менее токсичный. Тут сразу "ооо ряяя вкатыш, ты ненужный член общества хуе-мое да. иди за уроки ряяя". Дефолтный ответ на просьбу о совете print('Пошел нахуй') Сразу все желание пропадает сидеть тут. Конечно, если люди-исключения. Пару раз общался с адекватными здесь, которые подсказали и помогли. Однако в основном реакция как выше. >>2005129 Это да >>2005130 Спасибо. Я работаю сейчас в корпорации, продаем говно скажем. Я еком специалист и мне часто приходит задача: Переименуй фото на каждое SKU так то так то. Это делается чтобы на маркетплейсы их выложить. Так вот, хочу это автоматизировать а заодно прокачаться в программировании. Сейчас я на стадии: есть одна папка в ней лежит 100 папок в каждой из 100 папок лежит еще 5-10 папок и уже в каждой из этих папок лежат фотки которые я буду соответственно переименовывать. Следовательно мне надо избавится от ненужного звена, а именно удалить вот эти папки (пикрил 1). То что я написал уже ошибка и я не понимаю почему он не показывает мне лист вложимости подпапок(пикрил 2 и 3) Очень буду благодарен если подскажите!
>>2005134 Я понимаю что буду копировать фотки в лист, потом выносить этот лист в основную папку, а папки вложения буду удалять, но питон не хочет видеть что у меня в подпапках, собака такая. В консоли видно что он мне перебирает и не видит вложимость, но если я вызываю функции вручную и по одной то он мне все это делает.
>>2005134 Это рекурсивная задача и решается она рекурсивно, а не твоей хуйней. Но ещё это частая задача, поэтому она уже реализована в стандартной библиотеке - смотри os.walk
>>2004109 >Ты сначала задачу свою опиши Нужно сделать 30 отдельных реквестов и чтобы это не занимало 10-15 секунд нужно чтобы было быстро. Это для dashbord поэтому больше 5 секунд будет уже плохо.
Братцы, помогите с логикой. Есть API, который я опрашиваю в бесконечном цикле раз в час, передавая случайное число от 0 до N. N может изменяться и я хочу его чекать раз в 2 недели и, если он изменится, менять. Как это реализовать в Python? Где хранить старое N? Как в запущенном процессе проверять N?
>>2005077 Разница в области действия твоего кода же, если ты во вьюхе сделаешь, то в другой вьюхе save останется прежним, если в сериализаторе, то только при использовании этого сериализатора, если в модели - во всех случаях. Вот и решай когда тебе это надо. >>2005104 Со строкой 'a' сработает? >>2005199 Вот тебе пример с покемонами: https://www.twilio.com/blog/asynchronous-http-requests-in-python-with-aiohttp Если тебе нужны результаты всех 30 запросов вместе, то используй await asyncio.gather(), он подождет пока все запросы исполнятся и выдаст тебе результаты пачкой. Если надо отдать на клиента результат отдельного запроса не дожидаясь остальных, то создавай задачи отдельно с помощью asyncio.create_task()
Какова вероятность, что в ближайшие лет 5-7 Django перестанет быть актуальным? Тут ведь, как грибы после дождя, вылезают компактные асинхронные фреймворки, позволяющие практически из коробки получать более-менее нагружаемые сервисы, так, спрашивается, каким останется юзкейс для Django?
>>2005389 Что тебе помешает перекатиться с джанги на другой популярный фреймворк? Это же не другая технология, и даже не другой ЯП. Просто либа к нему, для менеджмента реквестов и респонсов.
>>2005415 Думаю Джанга сможет адаптироваться под современные реалии, за счёт большого опен-сорс копьюнити. Та же поддержка асинхронности и ASGI тому пример.
Здарова питонисты, я к вам пришел из другого, более элитного треда и у меня к вам очень важный и каверзный вопрос
А не расскажите ли вы мне часом, почему в питоне нет нормальной функции вывода???
Ваш пидорский print() на самом деле является println(), он тупо ставит \n в конце любой строки. В любом другом нормальном языке есть функция вывода в строку, без переноса
>>2005477 Да вообще долбоебы Надо было не 2 сделать а 4: одна выводит в строку, другая через строку, третья через запятую а четвертая меняет регистр при выводе Вот тогда было б заебись
Вы как раз таки и указали на проблему питона. Там по стандарту стоит енд="/n" хотя по стандарту не должно ничего стоять А если хочешь вывести на новую строку то как раз таки и использовать этот доп аргумент
А пример на джеве я сделал потому что там анон сам это попросил >Кста, анон, попробуй так в своих явах
>>2005554 Зелёный, принт обычно используют для дебагга каких-то переменных для себя. Мне проще написать print(a), и увидеть в терминале вывод в отдельной строке, чем каждый раз писать print(a, end="\n").
>>2005554 >Вы как раз таки и указали на проблему питона. Какая ещё проблема питона? Как раз в большинстве случаев нужно, чтобы print переводил строку, чтобы не писать "\n" каждый раз. Это реально очень неудобно каждый раз писать руками, как в C/PHP, например.
Если тебе нужно печатать на экран без перевода строки, то скорее всего ты что-то делаешь не так, что дурной стиль и чревато проблемами. При этом у тебя есть такая возможность, указав end="". Но я не помню, когда последний раз так делал.
В норме ты должен сначала сформировать строку, а потом уже делать её вывод.
>>2005622 Тоже не по стандарту? Лучше же включать дебаггер и перезапускать весь проект, чем законсолить нужный объект в классе и глянуть че в него упало. Зато по какону и профессионально
Кто-нибудь писал/тестил Rust'овские модули для пайтона в продакшене? Хочу попробовать в одной приложухе переписать основную логику на Rust'е через вот это вот - https://github.com/dgrunwald/rust-cpython . Интересено, какие подводные.
>>2005323 >Со строкой 'a' сработает? Нет, а разве это является смехуечком по условию? БТВ моя хуйня еще валится если смехуечков не найдено, так что надо было добавить в начале return 0, если в строке не найдено смехуечков ah ha.
Как мне вставлять списки в клеточки таблички pandas? То есть чтобы заработало df['column_name'][0]=[1, 2, 3]. Я для начала создал этот столбец и заполнил нанами df['column_name']=np.nan А вот при попытке вместо нанов писать списки мне ругается setting an array element with a sequence. При этом знаю точно, что списки туда запихнуть можно.
>>2006400 Сам сделал, но костыльно. Пришлось делать список из этих списков, чтоб длина соответствовала длине датафрейма. И уже это список списков пихать как целую колонку. Что-то типа list=[[1,2,3], [2,3], [1,2]] df['column_name']=list
По работе написал программу, которая залезает на хост БД, с помощью Pyinquirer и выбирает нужную базу данных и опять же по выбору лезет в нужную таблицу, забирает оттуда данные, форматирует их в нужный вид и подставляет в текстовый файл с кучей предыдущей инфы из этих таблиц. Попутно ещё разучил регулярки в SQL. Короче по сути вышел такой дифф. Скрипт получился большой, на 2500 строчек. Буду думать, как оптимизировать, а так прям пиздец охуенно, срезал этой штукой часа два работы каждую неделю и постоянные обосрамсы на продакшене. Ещё буду прикручивать версионирование через гит, чтобы обновлять эту программу.
Есть 1 код через который пытаюсь приконектиться к БД, но все время выдает ошибку, что класс com.ibm.as400.access.AS400JDBCDriver не найден. Очень больно, тыщу страниц в гугле прошел, но ничего не находится.
>>2006225 Не совсем понял тебя, передаешь хедеры при создании сессии и все, они будут отправляться с каждым запросом: aiohttp.ClientSession(headers=headers) >>2004923 Втупую пересылаешь все на клиента, а на клиенте используешь одну из миллиона DataTable.js
>>2006529 Серьезно, чел? Ты прописываешь драйвер для подключения, драйвер не найден. Получается, что нужно нагуглить, как установить этот драйвер или какой правильный драйвер туда прописывать. Разве нет? Сколько IQ? Какая зарплата?
>>2006431 2к строк это прям очень много, я недавно целый проект написал за месяц примерно на 4к строк, полностью рабочий, а тут одна функция, уверен что все нормально сделал или накостылял так сильно? Или может это нормально, на питоне просто редко вижу такие файлы огромные
>>2006890 Скажем так: если твой IQ 70 ты это однозначно пруфает что ты дурачок (если конечно ты зачем-то специально не завалил тест или не писал его будучи больным/бухим); а есди твой IQ 130 то это не пруфает вообще ничего
Маньки очень любят выпячивать свой маня-IQ, просто потому что это одна из очень немногих сфер где они хоть чего-то достигли
>>2006890 А ты типичная тупенькая антиинтеллектуальная пидораха. IQ - это, буквально, уровень сообразительности, осознанности, способности грамотно принимать решения и следовать дисциплине. Американцы во время вьетнамской войны понабрали лоу-IQ дебилов из низших слоёв населения в армию однажды, потому что high-IQ население не хотело воевать - результаты были о ху еть. >A man assigned to t-shirt printing shop was unable to understand alphabetization and had to pick out each letter for printing by scanning through the box one by one; a sergeant trained two men to drive military trucks somewhat successfully but they were too dangerous drivers to be used and were transferred out; another simply forgot to get back on the helicopters after a village search forcing a second retrieval mission; another was lucky enough to be sheltered by his sergeant in mess hall duties (until a mortar hit it, killing him); one played a prank on his squad mates, tossing a defused grenade at them two times, but on the third throw forgot to disable it; another wandered away from an ambush and wandering back, was killed by his squad; while yet another almost shot his commander with a LAW rocket when startled; another did kill his commander while on guard duty when he forgot to ask for the password before shooting; another forgot to put his rifle safety on (shooting a squad mate in the foot, who died); another tripped a booby-trap while not paying attention; another was captured by the NVA and went insane, screaming endlessly and defecating on himself while being beaten… It is unsurprising that many of them would be made to ‘walk point’, or ejected somehow, in addition to the constant insults and abuse—a new recruit was told the NVA would kill them all in a few hours, went insane from fear, climbed up a flag pole, and jumped off it; and another was beaten to death in Marine basic training. Это ревью книги, полностью здесь https://www.gwern.net/Book-reviews#mcnamaras-folly-gregory-2015 IQ это просто биологический факт, на который влияет окружение во время взросления, наследственность от родителей, уровень дохода семьи, образованность, etc. >>2006944 >есди твой IQ 130 то это не пруфает вообще ничего Пруфает как минимум способность кодить. А на самом деле, пруфает вообще всё.
>>2007247 >Пруфает как минимум способность кодить. Тащемта, коденгу на питоне научить можно любую мартышку, причём мартышку, не осилившую даже жс/пхп, о каком там айсикью ты размечтался, маня?
>>2006641 >Втупую пересылаешь все на клиента, а на клиенте используешь одну из миллиона DataTable.js Если готов помочь в личку, готов заплатить, если проконсультируешь, как это делать.
>>2007314 Это разные проще, которые многие путают. Си проще, но на нем сложнее решать сложные задачи. Питон сложнее, но на нем проще решать сложные задачи.
Посидел на codewars, поделал задания. Понял, что процесс обучения остановился. Куча времени уходит на тонны говнокода, чтобы в результате увидеть, как народ решает тоже самое в 2 строки с неизвестными мне функциями. Я конечно лучше стал обращаться со старыми знаниями, но новые от заданий приходят очень мало. Лучше пойду книжки читать.
>>2007327 Там процветает писькомерство на тему краткости, но пользы от этого немного. Я просматриваю все популярные варианты и иногда бывает малаца, хорошо зделали, но не очень часто.
>>2006641 >Не совсем понял тебя, передаешь хедеры при создании сессии и все, они будут отправляться с каждым запросом: aiohttp.ClientSession(headers=headers) Допустим у меня есть ещё и другие реквесты. Чтобы постоянно в юнит тесте не писать хедерс=хедерс может их можно как-то сделать глобальными и доступными сразу при запуске любого теста для которого нужны хедерс.
>>2007331 У этих долбоебов вообще порой фетиш сделать как можно больше в 1 строку, даже когда это говно абсолютно нечитаемо За такой код на проде будешь точно выебан
>>2007261 >Тащемта, коденгу на питоне научить можно любую мартышку Увы, нет вот совсем. Проблема в том, что мартышки не любят и не умеют думать, вот совсем. Без этого кодинг не работает, потому что в кодинге необходимо думать над тем, что делает твой код.
Питону проще обучить неусидчивых, потому что меньше надо ботать всякой инженерной хрени, чтобы получить рабочий код.
>>2007611 >не любят и не умеют думать, вот совсем Бля, поди подмойся, маня Ты больно дохуя на себя берешь На работе встречаю таких затупков что пиздец. Ахуеваю, как они вообще мышки взять в руки могут. Но тем не менее кодят и зарабатывают бабки
>>2006432 Знаешь, как на гитхабе подсвечиваются красным и зеленым изменения в файлах? Вот эту хуйню я называю дифф. У меня нечто похожее, только программа не отображает дифф, а записывает его в файл. >>2006778 Там нужно лезть в 40 разных таблиц с забористым SQL с регулярками и очень по-разному форматировать каждый полученный массив данных. Но да, если бы пришел профессиональный питонист, он бы эту хуйню раза в два точно смог сократить, я-то и не программист даже. Просто манагер, решивший автоматизировать работку.
Как в lxml собирать через xpath содержание только тех div'оф, у которых отсутствует определённый div-потомок? По отдельности этих потомков я могу находить через такую штуку - doc.xpath("//div[contains(concat(' ',normalize-space(@class),' '),'class_name)]"). Проблема в том, что так невозможно отследить наследственные связи.
>>2007945 ругается на строку: regs = re.findall(regs_pattern, match['last_line']) ошибкой: "tuple indices must be integer, not str" regs=() - не помогает. Что нужно, чтобы tuple стал integer?
>>2008014 Не tuple должен стать integer, а индекс для tuple.
У тебя, видимо, match - список (а не словарь), а ты ему в качестве индекса подаешь строку 'last_line'. Если нужен последний элемент списка, то делай match[-1]. Если last_line - целочисленная переменная, то делай match[last_line], без кавычек.
Нужно чтобы один скриптик запускался один раз в день, что для этого нужно? Я так понимаю нужно поставить его крутится на сервере в вечном лупе, или это делается на уровне ОС сервера. Я вообще ньюфаг в этом
match в строке 23 это действительно tuple, который потом там распаковывается и пакуется обратно в словарь. match в строке 32 это уже такой словарь и есть. Так что, match['last_line'] - обращение по ключу к такому словарю.
Нубвопрос, но все же, не могу нагуглить, как создавать "перекрестные" словари. Допустим, нужно создать колоду карт из двух листов - в одном ранг, в другом - масть: value = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"] suit = ["Hearts", "Diamonds", "Clubs", "Spades"]
Так вот вопрос: как максимально простым и лаконичным образом создать словарь, где каждому значению из листа value будет перекрестно присвоено каждое значение листа suit? Например: {'A': 'Hearts', 'A': 'Diamonds', 'A': 'Clubs', 'A': 'Spades', '2'': 'Hearts ... и т.д. 52 раза}
Пробовал через dict.fromkeys(value, suit), но этот метод не распаковывает лист suit, а выдает: A ['Hearts', 'Diamonds', 'Clubs', 'Spades'] 2 ['Hearts', 'Diamonds', 'Clubs', 'Spades']
>>2008304 спасибо, ошибка пропала, но не работает как должно - трасса в ИДА не подсвечивается) Это тот (вернее, похожий - у меня есть более древняя версия, которая уже недоступна) код с гитхаба и есть (тот тоже не работает - не та версия IDA или python. На разных версиях заставить работать не удалось), просто все методы засунул в класс регистрации плагина.
что делает: с помощью windbg снимается трасса выполнения с исполняемого файла и затем в ИДА подсвечивается ход исполнения. Должно в итоге быть так: см. рисунок. Состав метода fillInGraph одинаковый у меня и на гитхабе, т.е. ошибка где-то в логике манипуляции с данными снятой трассы.. п.с. если поможешь завести - зашлю пару сотен на телефон)
>>2008316 Никак. Для каждого ключа в словаре будет одно значение. То есть, у тебя в одном словаре может быть, например, 'A':'Hearts' или 'A':'Diamonds', но не одновременно.
Если нужен список всех пар, то cards = [(v, s) for v in value for s in suits]
>>2008327 отличие моего кода от гитхаба (если там рабочий) здесь:
у меня открытие файла трассы: filepath = idaapi.askfile_c(False, ".", "Pin log file"); f = open(filepath,"rb" ) text = f.read() matches = re.findall(pattern, text)
на гитхабе: text = open(filename).read() matches = re.findall(pattern, text)
может, состав переменной "text" отличается, т.е. код не эквивалентный? Код с гитхаба по открытию не работает, видимо, другой состав функция СДК питона. У меня при запуске плагина появляется окно выбора файла трассы и его открытие. код до сообщения "idaapi.msg("fillInGraph\n")" работает, сообщение появляется, т.е. парсинг файла проходит..
>>2008329 Спасибо! Не знал, что List Comprehension можно использовать таким образом для двух списков, и что он будет работать именно так. И да, со словарем ступил, он и вправду был бы невозможен.
>>2008263 Если каких-то особо специфичный требований нет, то, конечно, такое делается на уровне ОС, обычно, там есть системы, которые запускают программы по расписанию. Что конкретно надо делать, зависит от ОС. Если у тебя там разновидность линукса, почитай про cron и systemd timers, в винде такая штука называется планировщик заданий (Task Scheduler)
>>2008376 вот файл и его трейс: https://disk.yandex.ru/d/ub_3do4q1Z8NqQ Отркрывать в ИДА_6.8 (теоретически, должна подойти любая версия 6.х). Нужно установить на диск С питон_2.7 и закинуть плагин в соответствующую папку ИДЫ. вот плагин: https://disk.yandex.ru/d/9XSeJzunyZ6bZg п.с. трейс снимается с помощью "Debugging Tools for Windows" под W7, он стандартный. Под W10 wdbg стал поддерживать js, новый плагин windbgida на гитхабе.. не проверял.
>>2008430 вот что ответили на одном форуме: Может, версия питоне не подходит? Странно.. ИДА6.х работает с питоном 2.7, название файла об этом говорит..должно как-то работать!
>>2008434 Нет, дело не в этом, хотя я тебе поначалу то же самое написал про кортежи и индексы. Просто в том коде на гитхабе переменная с именем match используется в двух разных функциях в двух разных смыслах. В parseFile - это кортеж, а в fillGraph - это уже словарь. Когда ты эти функции запихал в одну, произошла накладка, которую фикс с for match in ret решает.
>>2008492 гитхабовский файл не совместим с ИДА6.8 - другая структура плагина, требуется def PLUGIN_ENTRY(): Если и изменять (максимально почти рабочий), то этот "оригинальный" файл: https://disk.yandex.ru/d/k5RiDSvaHCaxvA который тоже вызывает ошибки
Лучше обьясни, как можно серьезно что-то реверсить, и реально спотыкаться на простых задачках вроде питона или регулярок.
Я всегда завидовал способности настоящих инженеров разобраться на ходу с такой хуйней. Их научили архитектуре базовых процессоров вроде 8080 или з80, их научили базовой цифровой схемотехнике, их научили си, как связывающим всё это, дальше лишь дело желания. Но с другой стороны, на виду истории всяких кулхацкеров-кардеров, в 95% полнейших селюков и дилетантов, хуй проссышь, короче.
>>2008589 Да я любитель-самоучка, ни разу не программист (немного на pb пописываю и asm читаю, могу в студии исходник собрать). Ни образование, ни работа никак не связаны с "хобби", на которое ещё и времени не хватает..
Нужно сгруппировать данные в список по дням в датафрейме в нескольких колонках. Для одной работает df.groupby(pd.Grouper(key="dates", freq="D"))['column1'].apply(list).reset_index() Но если взять две df.groupby(pd.Grouper(key="dates", freq="D"))[['column1', 'column2']].apply(list).reset_index() то получается в каждой строчке список из названий колонок вместо данных вот так ['column1', 'column2'] ['column1', 'column2'] ['column1', 'column2'] Как быть?
>>2008646 ида лежит на торрентах: https://yandex.ru/search/?text=ida%206.8%20torrent&lr=110907&src=suggest_T ошибок запуска плагина нет, но дерево не закрашивается. Подозреваю из-за того, что отпарсенное значение "matches" не доходит из процедуры "parseFile" в "fillInGraph". Процедура "parseFile" ничего не возвращает, в результате в "fillInGraph" значение "matches" пустое - новая локальная переменная (кортеж/список или чем он там является)..
>>2009642 Замечательно помогает. Запускаем такой код https://ideone.com/n94Fjf Сразу при запуске пишется test и висит, потом жмем ctrl+c, валится эксепшн, буфер сбрасывается и видим test2.
Иногда смотрю в access логи сайтика, который сдал недавно, меня аж в пот бросает от этих логов, сайт не рабочий и все логи состоят из чего-то похожего /shell?wget+147.153.15.85:8080/strashniy_script+/tmp, успокойте меня пожалуйста, я вроде и понимаю что это боты, но интстинктивно иду проверять /tmp, конфиги nginx’а и т.д
>>2009710 Такие боты генерируют дохуища логов, особенно в пропаленных диапазонах айпи. Что по хттп, что по ссх. Можешь поставить себе какой-то fail2ban для спокойствия.
>>2008828 кажется, разобрался: 1. имхо, автор плагина усложнил без необходимости плагин, который пишется из трёх строчек, так как: -вывод лога wdbg можно сильно упростить командой "par 0xdeadbeef" или другой, отключающей вывод регистров - нам от лога нужно только знать выполняется ли jmp/jne/jxx (то есть трейсить, проверять опкод функцией "GetMnem" на "jmp/jne/jxx") и подсвечивать функцией "idc.SetColor(0x41705B, CIC_ITEM, 0xBFBFE4)", где первый аргумент - адрес опкода 2. независимо от того, работает ли парсинг.. скрипту нечего подсвечивать, потому что в логе wdbg отсутствуют подходящие адреса! - все адреса в вызываемых модулях! Возможно, в новых версиях поменялся вывод wdbg.
Есть какой-то курс или задача, которая позволит держать Большую часть знаний в голове активными? У меня пока так, выучил одно, забыл второй, повторил второе забыл третье и то.
Запутался с импортами, аноны. Есть два скрипта в одной папке. Из одного импортирую в другой как на скрине. Все работает, но VS Code дает предупреждение. Что не так?
>>2009898 Блять, я прочитал "Import "product" could not be resolved". Спрашиваю, потому что все работает. Интересно, это типичное поведение для VS Code или нужно заморочиться и исправить?
Подскажите, пожалуйста, есть модель и связь на саму себя. Когда я пытаюсь добавить поле 'parent' в forms, то он пишет, что не существует у этой модели такого поля. Заранее спасибо.
>>2009726 Слушай, давно хотел узнать, есть какой-то список классических приложений для сайта, которые вот как fail2ban, банят при ддосе, ограничивают читая логи, качают много медиа, допускают только проверенные юзерагенты и т.д, наверное еще много чего есть полезного, подскажи
>>2003913 (OP) Сап двач. Начал учить питон буквально 4 дня назад. Пока тренируюсь, пишу всякие кодики в рамках моих знаний, а их очень мало пока. Вот пикрелейтед код. Он должен симулировать парадокс Монти Холла. В данном случае я попытался написать случай, когда после вопроса ведущего дверь меняют. Тоесть должно быть около 67% выигрышных ситуаций. Но прогоны выдают около 33%. Значит где то в кусках if, elif семантическая ошибка. Если кому не лень, посмотрите может подскажите где там я ошибся.
Аноны, вроде достаточно много прогаю на питоне и понимаю ооп, но есть такой вопрос, в этих ваших джавах есть очень много всего и интерфейсы и полиморфизм типов и из-за этого кажется что питон это урезанный язык, но если копать глубже, то как по мне все это дедовское брюзжание и нахер не нужно, все чего достаточно это множественное наследование, возможность оверрайдить методы и сам принцип объектов, в чем я не прав?
>>2010644 Есть два подхода для реализации идей ООП, один подход всё делать через интерфейсы, второй подход через "протоколы", он же duck typing.
Когда язык компилируемый, то там чисто технически проще через интерфейсы всё. Ты передаёшь в функцию указатель на интерфейс, то есть указатель на таблицу адресов функций, которые что-то делают. Эту таблицу надо формировать, вот это и есть интерфейс.
Когда язык динамический, ты можешь получать эти функции по имени. Тебе не нужно формировать интерфейс, тебе достаточно, чтобы был нужный набор методов у объекта, это и называется протоколы.
У каждого подхода свои плюсы. Протоколы значительно проще, более гибкие. Но менее строгие, и самая большая проблема это конфликт имён. Два разных протокола могут хотеть работать с одинаково названным методом, но который работает по-разному.
В принципе, общая логика такая, что чем больше проект, тем актуальнее, чтобы там была строгость, хоть из-за неё и большой перерасход кода.
То, что хорошо для небольших проектов, там на десятки тысяч строк максимум, может приводить к коллапсу на мегапроектах в сотни тысяч и миллионы строк.
>>2010644 Ну так-то в питоне тоже есть и полиморфизм и интерфейсы (например, через декоратор abstractmethod из abc). Так что, трудно назвать его урезанным в плане ооп. Парадигму "всё есть объект" он вполне реализует. Чего нет - так это строгой инкапсуляции (нет настоящих private свойств или методов), что Гвидо сделал намеренно ( "we're all consenting adults here").
Вопросы по argparse 1 как установить чтобы аргумент -h вызывался при запуске скрипта без аргументов? например python app.py выдает тоже что и python app.py -h 2 почему функции устанавливаемые в set_defaults(func=) требуют аргумент?
>>2010753 Я кстати понял, что был лучшего мнения о джаве, чем вот она заслуживает. На джаве сильно сложнее fizzbuzz не писал, на плюсах ООП писал, но давно и забыл уже.
Посмотрел, проблема с конфликтом имён актуальна и для джавы. То есть если в двух интерфейсах есть метод с одинаковым именем, но разный по сути, то будет большая проблема.
А раз так, то весь смысл интерфейсов теряется, никакого профита. Просто технология, как это реализовать в статическом языке, не актуальная для динамического языка как питон.
Хотя ХЗ, возможно я чего-то не знаю. Наверное есть решения для этих проблем на джаве, должны быть.
Понимаю, что вопрос не по питону (и не по джанге), но как реализовать выпадающий список из 50+ тысяч элементов в шапке колонки таблицы? Сделал это через DataTables, как выше писали, и при загрузке страницы, если попробовать раскрыть такую эболу, то сайт подвисает. Наверно есть более правильный способ (кэш или динамическая подгрузка), нормальный за 2 дня не нагуглил. Прошу помощи. За более подробную консультацию в личку, за деньги, ибо чую, что не тяну, но проект сдать хочу (и уволиться)
Тот самый долбоёб, который решил себя попробовать в роли питухон-разраба
Потыкал в матплотлиб, открыл обучалку и мне дико понравилась визуализация данных. Сам изучаю чисто по фану без особой цели устроиться, но вот интересно, этим в рахе можно заработать(питон, скьюэл, визуализация, может панда с нимфи и прочее туда же) ?
>>2010872 Ха, прикольно, все есть кроме интрументов, хотя там буквально написано в их описании "Позволяет заниматься БИ без вмешательства айти департмента" кек, ну и джаваскрипта тоже нет, ну и нахуй его.
>>2010856 >и что пользователю делать с твоим выпадающим списком? Я ебу что ли, так в тз написано. Значит попробую сделоть инпут с автокомплитом, а потом уволюсь. Спасибо, за идею.
>>2011091 Сказали, что питоновских знаний хватает, а джангу и веб смогу изучить за месяц для решения нужных им задач. Но вот неделю уже пытаюсь решать, и с джангой более-менее понятно, но веб темный лес.
Знаете, почтенные. Изначально я хотел написать пост в постмодернистской манере и взять картинку с сортырно-фекальным няряльщиком, но передумал.
Так вот. Господа! Заинтриговало меня существование этого вашего Питона. Дайте краткое заключение о практической целесообразности применения и смысле существования Питона. Для человека, почти ничего не понимающего в программировании. Буду признателен. Мой интерес искренний, если что.
Предпосылки: - у меня на Питоне подмастерье пишет, отзывается о Питоне, как о годноте; - я сам не занимаюсь промышленным программированием (в том смысле, в котором программа является отчуждённым промышленным продуктом, а не промышленным инструментом, связанным с технологическим процессом); - сильное влияние на меня как инженера оказал Си, - ощущается мной избыточная детализация программы на Си — хочется решать задачу ближе к задаче, а не к адресной арифметике.
>>2011400 Согласен, я пошуршал по торрентам, как-то редко со степика сливают, я так понял только официальные курсы от хозяев степика в основном слиты Интересно, хотя бы в течение месяца появится ли на торрентах
>>2011383 Замечательный прикладной язык, очень приятный в изучении. Не знаю, насколько тебе это надо и какие задачи ты собираешься решать, но можно попробовать, если интерес есть.
>>2011383 >Дайте краткое заключение о практической целесообразности применения и смысле существования Питона. >Для человека, почти ничего не понимающего в программировании. Ну ок: Питон это пиздец как круто Это строго и свободно одновременно, стройно и красиво Это зрело и вполне молодёжно Это дофига возможностей, чтобы писать хорошо и быстро Это лучшее комьюнити, хорошая документация
>>2011412 Он для бэкэнда на питоне составлял список, про фронт там было сказано что будет плюсом знать html/css/js по верхам. линукс базово и тд Че нет то в современных реалиях? С голым питоном наврядли куда джуном возьмут
>>2011396 >чувак с канала Интересно, он сам жестикулировать учился, вот все эти жесты учил и тренировал, или может есть какие-то специальные курсы для влогеров? Сколько стоят такие?
>>2011407 Мелкая автоматизация. Там, где клей между готовыми утилитам (вроде bash) становится громоздким и неудобным, т. к. нужно дописывать много. Числодробление, матрицы, линейные пространства, оптимизационные задачи. Там, где matlab предоставляет слишком сложные абстракции.
>>2011408 >Это лучшее комьюнити, хорошая документация На старте хотя бы мне будут доступны русскоязычные источники?
>>2011396 Когда вы успокоитесь со своими поисками ИДЕАЛЬНЫХ курсов? Берешь любой популярный курс или книгу и хуяришь. Там одна и та же базовая хуйня, дальше надо лезть вглубь самостоятельно.
>>2011415 Если ты занимаешься чем-то, что хоть отдалённо имеет отношение к интернету, но не знать html/css хоть на базовом уровне это просто полное дно. JS тоже как-то знать надо. Вопрос в глубине этого как-то.
Ну в любом случае представление о вёрстке необходимо, как и понимание, как JS работает с браузером и бэкендом.
>>2011417 >Числодробление, матрицы, линейные пространства, оптимизационные задачи. Там, где matlab предоставляет слишком сложные абстракции. Там тебе придётся учить numpy и другие пакеты, с ними бошку сломать придётся и это не совсем питон, строго говоря. Но правда на других платформах не проще.
ХЗ, что в матлабе, подозреваю что примерно тоже самое.
>На старте хотя бы мне будут доступны русскоязычные источники? Что-то есть и на русском.
>>2011420 Я в том то и дело что базовую хуйню уже знаю Хочется более глубоко про устройство интернета, протоколы, безопасность Там целая глава про питон, за нее особенно платить впадлу, потому что за то время, пока он целый год этот курс высирал, я уже 100 курсов посмотрел и напрактиковался
>>2011436 Моё мнение, курсы могут быть полезными только как обзорные, о чём-то рассказать в простой форме, показать, как какой-то инфраструктурой или инструментами пользоваться. Чтобы уже дальше было понятно, куда копать.
Если нужно глубже, то надо или смотреть университетские лекции, или читать книги.
Про более глубокое устройство интернета лучше поискать университетские курсы в открытом доступе. Хотя хз, не могу ничего конкретного порекомендовать. Но совершенно точно не обычные коммерческие курсы.
>>2011420 Это какая-то русская проблема. Может из-за того что у нас принято 90% быдла ломиться в вышку где учиться то и не особо сложно. Поэтому все люди автоматом подразумевают что тебя будут учить корифеи, деды, опытные ветеренары своего дела. В США, например, либо плати 100к в год, либо будь гением, либо учись сам, самое дорогое что там есть - буткамп, а так все курсы(скорее интерактивные сайты) это всякие кодакадеми, джет брейнс, удасити - стоят 200 баксов в год. Такой хуйни чтобы американец платил условные адаптированные под него 200к рублей и учил какую-то дичь год от ОПЫТНЫХ ПРЕПОДАВАТЕЛЕЙ(которые не гуглятся, и конторы в которых они работают якобы вообще не существуют) это просто нонсенс. По факту человеку для обучения адекватному достаточно лишь списка технологий и библиотек которые надо осилить. Голого питона как бы и не существует, что там иф, ваил, класс, деф, фор, лист/дикт/сет/тупл и что я там забыл? Все остальное - библиотеки, sql, джсон, хтмл+цсс+жс, гит. Курсы на которых тебе как работает гит рассказывают месяц или учат делать первый сайт с пиццами взятыми из стока гугла 6 месяцев, ну не смешите
>>2011493 >Голого питона как бы и не существует, что там иф, ваил, класс, деф, фор, лист/дикт/сет/тупл и что я там забыл? Все остальное - библиотеки, sql, джсон, хтмл+цсс+жс, гит. Голый питон это ещё импорты, классы и объектная модель, метаклассы, стандартная библиотека и связанные с этим подходы вроде логгинга, тайпинг, itertooks, разные докстринги, конкурентность, тестирование. Куча своих паттернов проектирования.
То есть как бы освоить язык и уметь писать на нём это на самом деле не "пара недель" даже для опытного программиста. Иначе ты будешь писать на питоне как на Си или ЖС.
>По факту человеку для обучения адекватному достаточно лишь списка технологий и библиотек которые надо осилить. Нужна программа обучения, как все эти технологии осваивать. Вот как освоить технологию "параллельного программирования"? Или даже ООП? Это всё длительный и многоэтапный процесс.
Правда курсы в этом мало помогут. Надо делать поправку, что курсы для тех, кто хочет чуть заплатить и пассивно поучиться. Просто таких большинство. А нормальное образование это совсем другие ресурсы, другие затраты и другая подготовка.
>>2011509 >Голый питон это Нет, ты молодец конечно, но вот только на курсах типа скиллбокса голвый питон это как раз то что я написал, а все что ты пишешь там дается просто как упоминание. >Нужна программа обучения, как все эти технологии осваивать. Не нужна, такого не существует, и программа обучения именно как педагогический/методический термин из образования к тыканью в библиотеку не применим вообще. Если человек хочет учить программирование по учебной программе - добро пожаловать в вуз, где разваливающийся дед тебе будет 2 года задвигать базовую физику и математику, потом 2 года будет рассказывать про транзисторы и параллельно будешь делать какую-то хуйню на си или плюсах, в итоге на 4м курсе когда ты напишешь охуенную приложуху распихивающую студентов по категориям в датабазу и увидишь этот же самый проект в джетбрейнс под тегом МЕДИУМ ДИФФИКУЛТИ станет немного понятнее почему это не самый эффективный способ осилить именно язык, а не набор хуйни в виде глубокой информатики, сигналов, кодирования и прочей шелупони абсолютно не нужной 99% времени. >>2011522 В сша для американца без американской вышки или ты про русского без русской вышки который хочет в гугл? В гугл не нужна американская вышка, берут так же по опыту, стажу, технологиям и собесу. В сша менее 8% людей идет в вузы, выкинуть половину вузов которые не обучают информационным технологиями, выкинуть 80% факультетов которые не являются пригодными для ФАНГ, останется дай боже сотка специалистов с вышкой в год, как все фейсбуки, гуглы, амазоны, цитадели, плюс государство наберет себе программистов если их нихуя не выпускают вузы, а?
>>2011533 >как все фейсбуки, гуглы, амазоны, цитадели, плюс государство наберет себе программистов если их нихуя не выпускают вузы, а? Раскрываю секрет века: русские, индусы, украинцы По тому, что ты говоришь, видно, что тебе никогда не доверяли более или менее серьезную задачу. Способности ответственно выполнять задание можно научиться только, если тебя раньше ебали за плохой некачественный результат. Поэтому преподы и менторы имеют свою копейку
>>2011533 >В гугл не нужна американская вышка, берут так же по опыту, стажу, технологиям и собесу. Нет, можно попасть в ФААНГ без вышки, но, там примерно 90% работает с вышкой.
>В сша менее 8% людей идет в вузы Сам придумал? В США свыше трети населения возраста 25+ имеют степень бакалавра. 13% это магистры и старше.
>разваливающийся дед тебе будет 2 года задвигать базовую физику и математику Иди в нормальное место и параллельно учись сам.
Образование системно. Нельзя полноценно осваивать базы данный, не умея в алгоритмы, например. То есть только на уровне маками можно, которая не понимает, что такое сложность, сложность выборки, почему какие-то операции дорогие, а другие нет, что такое нормализация, когда она нужна, а когда не нужна.
И куча всего ещё.
Да, если чел не хочет учиться, то в ВУЗе его ничему не научат, это факт. То есть сдаст экзамены и зачёты, но применять знания не сможет. Если хочет учиться, то помимо того, чтобы дополнительные курсы брать по выбору, ещё и самому доучиваться придётся, это тоже так.
Не совсем питон-релейтед вопрос, скорее по алгоритмизации. Есть файл А, АВ и В. А — csv файл, нужно привести в нормальный вид В — xls файл, нужно перевести в csv формат АВ — соответственно нормализовать и перевести в csv
Как это грамотнее сделать? Меня просто смущает момент АВ, потому что я сначала записываю csv файл, ранее бывший xls, а потом планирую его же перезаписывать writerow'ом.
>>2010785 Нет такой проблемы в жаве, хз откуда ты это взял. Имплементишь в объекте два интерфейса с одинаковыми именами методов - обязан предоставить два метода. Главное, чтобы аргументами методы отличались. А если у тебя два интерфейса и с одинаковыми методами, и аргументами внутри, при этом по смыслу работы не являющиеся альтернативными реализациями одного интерфейса, то это очевидный признак плохого дизайна системы.
>>2011913 > можно за один заход Хау? Не записывать содержимое xls в файл и просто в оперативе его крутить?
Короче как выглядит задача: У меня есть инпут папка. В ней А, В или АВ, либо все вместе. Мне нужен класс с минимальным повторением кода, который бы мог на выходе дать в папку аутпут нормализованный файл с тем же названием. Процесс нормализации, вкратце, перевод файла из вида +,C1,C2,C3,C4 R1,VVVV R2,VVVV R3,VVVV
>>2011950 Ну так в любом случае надо вычитать весь файл, чтобы переформатировать так, не? Так зачем дважды ходить? А с названиям в принципе легко. Читаем file.csv, пишем file.csv~, потом в конце rename и он заменяется.
>>2011736 >Где ты их находишь? лол в /b ну я там сидел 4 года, два месяца назад перестал туда заходить, а на прошлой неделе начал учить погромирование и пришел сюда. но в /b больше не хожу, потому что я старый уже и мне нельзя прокрастинировать
В языке Python есть какие-то рекомендации по использованию одинарных и двойных кавычек? Может есть какие-то негласные правила, о которых я не знаю? Мне как программисту на языке SQL хочется везде писать одинарные, но в коде других людей чаще вижу двойные.
>>2011953 У меня было еще решение элегантнее, если файл xls и ему нужно нормализация, то сохранять его csv с постфиксом. После нормализации сохранять файл с правильным названием общий метод для изначально csv и 'бывших' xls файлов и os.unlink по файлу с постфиксом, если такой существует. Но один хуй я сейчас все переписал, теперь у меня все методы возвращают лист листов, а записывается файл лишь в конце мейн метода.
На чем делают графические приложения на Python? Сделаю скромную петуху для души. Хочется, конечно, чтобы штука была относительно популярная и с большим комьюнити, легкая для вката, изящная в реализации, сильная в возможностях. Но чем-то можно и пожертвовать. Вроде как PyQt самое популярное, как оно? Или еще что-нибудь?
>>2011977 В PEP8 указано, что рекомендаций по выбору нет.
Я для себя придерживаюсь принципа, что для отдельных слов, символов, констант и т.п. одинарные кавычки, а когда какие-то фразы или предложения, то двойные.
>>2012025 >На чем делают графические приложения на Python? Почему именно на питоне? Питон - топовый язык для датасаенса и еще некоторых областей, но графику на нем лучше не делать. Это долго, сложно и бесполезно с точки зрения приобретенных навыков.
Есть некоторая функция loads(data: bytes) -> Union[dict, list, bytes, int], которая парсит некоторый формат данных и возвращает питонячий объект. Объект может быть словарем/списком/байтовой строкой/целым.
Так же есть еще один метод read_data(self) -> dict: return loads(self._raw_data), который парсит данные функцией loads, точно зная что вернется словарь, а не что-то другое. Но на "-> dict" mypy ругается: error: Incompatible return value type (got "Union[Dict[Any, Any], List[Any], bytes, int]", expected "Dict[Any, Any]")
Если у метода read_data поменять возвращаймый тип на Union[dict, list, bytes, int], то ошибки посыпятся уже в другом месте. Например при обращении к методу __getitem__, т.к у интов его очевидно нет.
Как в таких случаях раставлять анотации типов? М.б можно как-то явно указать mypy что конкретно в этом месте вернется словарь?
>>2012830 Хороший вопрос, самому стало интересно Наверное это хуевая функция если она умеет возвращать столько разных типов, Если не ошибаюсь, в компилируемых языках можно указать один возвращаемый тип или интерфейс, и в каком нибудь c# нужно было бы написать разные конструкторы для разного типа данных, и вернуть разных наследников класса с функцией read_data. Наверное тебе нужен класс-фабрика который возвращает объект с уэе распарсенными данными
>>2012888 Ты можешь например отсортировать списочек sorted(json, key=lambda x: x['id']) а потом groupby из модуля itertools сгрупировать с таким же ключом и там уже можно итерироваться по групам
>>2012968 Ах, лень тебе рассказывать ссылочную модель... Ты добавляешь в словарь ссылку на список. Потом ты этот список очищаешь в цикле, угадал? Получаешь, что значение словаря ссылается на пустой список.
>>2012974 >Потом ты этот список очищаешь в цикле, угадал Ванга, залогинься. В общем, где я прорукожопил инб4 при рождении и как всё-таки этот список добавить в словарь?
Аноны, сложно рандому с улицы изучить Data Science? Заебали уже чуть ли не с каждой дыры об этом говорить. Цены на курсы пиздецовые, зато потом лохам обещают золотые горы.
И, как я понимаю, Data Science это и аналитика данных и машинное обучение? или нет?
Уважаемый анон, как мне отсортировать по product_price структуру такого вида: [ Product(product_name='n1', product_price='14.88'), Product(product_name='n2', product_price='19.08', Product(product_name='n3', product_price='9.11') ]
Не могу понять, как достучаться до свойства product_price.
>>2013090 >>2013097 Аноны, сорян. Это был класс, унаследованный от NamedTuple и там сортировка осуществляется через from operator import attrgetter и дальше a.sort(key=attrgetter('product_price'))
>>2013537 Для уника нужно веб-сервис написать, а у меня есть опыт с цмсками на пхп. Но когда сказал, что буду писать на пхп мне пальцем у виска покрутили и отправили писать на c# либо пайтоне. На c# у меня опыта 0, а базу пайтона знаю плюс есть опыт работы с фласком не зашло от слова со всем. Вооот, хочу джанго подрочить, узнал что есть CMS и теперь хочу CMS.
Анон, мудрый, объясни, как это решить? Не понимаю, как сделать все начиная с 2 пункта. Я так понял, там должна быть рекурсия и if else? нихуя не понятно, есть вообще примеры на питоне подобного? если кто сможет сделать, могу скинуть 2 сотки на карту. Пикрил, как сейчас стоят диски и шпиндели, лол
Существует 8 шпинделей, пронумерованых от 8 до 1 слева направо. На каждом шпинделе надеты диски, в количестве, равном соответствующей цифре из ID студента. Все диски имеют разные диаметры. Диаметр диска равен M * 10 + N, где М – номер шпинделя, на котором надет диск, а N – это номер диска на шпинделе, считая сверху вниз. 1. Необходимо визуально изобразить предложенную задачу. Диски на шпинделях сделать случайных цветов. На каждом диске отображать цифру, равную его диаметру. Диаметр диска также показывать его фактическим размером в пикселях. 2. Необходимо вычислить, за какое минимальное количество итераций переместятся все диски на шпиндель номер 1 по следующим правилам: а) За одну итерацию можно переместить не более одного диска б) Диски можно класть только с большего на меньший в) Со шпинделя номер 8 можно перекладывать диски только на шпиндели 7 и 6 г) Со шпинделя номер 1 можно перекладывать диски только на шпиндели номер 2 и 3 д) Со шпинделей от 2 по 7 можно перекладывать диски только на два соседних шпинделя.
>>2013791 Если я правильно понимаю условие, то нет тут никакой ханойской башни. >>2013760 >Диски можно класть только с большего на меньший Правильно ли я понимаю, что можно перекладывать диск, лежащий непосредственно на диске с диаметром x, непосредственно на диск с диаметром y, только если x > y?
Суп питонач. Можешь насоветовать чего-нибудь для быстрого вката в sqlalchemy? На работе используют, я до этого только djangoORM использовал, а сейчас надо бы по быстрому вкатиться.
Может есть какой-нибудь блитц который позволит делать запросы средней сложности, но без глубокого погружения в детали? Т.к. с деталями можно и оф доку читнуть.
Можно на англ, но если на ру будет, то вообще пушка. Спасибо, двач.
>>2003913 (OP) Пасаны, а как работать Selenium-ом с SPA? Когда пытаюсь найти любой элемент на странице он мне постоянно выдает "no such element", сколько бы времени я ни ждал через time.sleep()
>>2014350 Там можно ждать появления конкретного элемента. Но может ты не все настроил и получил заглушку "пошел нахуй, ботяра". Но в 90% лучшим решением является не дрочить селениум, а смотреть реквесты и повторять у себя, получая сразу готовые данные от бэка.
Прекомпиляция регексов в пайтоне стоит того? Пишут, что интерпретатор их кеширует, но как там в продакшене это оформляют? Вряд ли же в чистом виде рассредотачивают рассредотачивают по коду.
Имеет реальный смысл, когда у тебя в большом цикле обрабатывается много регулярок. Например, ты сканируешь файл построчно и каждую строку проверяешь каким-то сложным регулярным выражением. Выигрыш можешь быть кратным, при условии, что именно на регулярки основной расход времени идёт.
Но не забывай, что преждевременная оптимизация считается антипаттерном.
>>2014409 Ну ты лалка, я же говорю, в любом случае всё сводится к реквесту на бек, смотришь его и повторяешь. Берешь любую дебажную прокси и гоняешь свою форму, там всё будет. >>2014475 re.py обвзяка доступна в pure-python виде. Там видим, что используется искаробочный же lru_cache с настройкой 512. Вообще нет смысла заморачиваться, если у тебя там пару штук регулярок.
Есть несколько телеграмм-каналов. Как заставить бота написать в них в качестве клиента? (под ботом я имею ввиду любую программу, которая будет эмитировать действия обычного юзера)
>>2014502 >>2014509 > Но не забывай, что преждевременная оптимизация считается антипаттерном. > Вообще нет смысла заморачиваться, если у тебя там пару штук регулярок.
Ну, вот, у меня по профайлингу выходит, что прекомпиляция даёт пусть и маленький с точки зрения задачи скрипта, но всё же прирост в скорости. Антипаттерн, не антипаттерн, но как-то глупо было бы отказываться от этого, нет? И если уж прекомпилировать, то куда это всё по-православному складывать: вверху, там, где константы, или выносить в отдельный класс/модуль?
>>2014142 >>2014142 Я щас именно этим занимаюсь Тупо смотрю видосы на ютубе, смотрю как они делают сначала там создается движок через create_engine, в него передаем урл к базе данных потом с этим движком получаем объекты MetaData(в нем накапливаются объекты таблиц) и sessionmaker(он рожает session, грубо говоря это executor у которого есть метод commit) Модели таблиц создаются через Table, в аргументы ему передаются Column, а ему в аргументы передаются Integer(), Text() или primary_key=True например. Создать все таблицы физичесуи в бд metadata.create_all() Можно создать объект запроса например query = table.insert((1, 'dddd')) и передать его в session.execute(), ну а вообще там одно и то же разными способами можно делать Вот вообщем-то и все
>>2003913 (OP) Сап двач. Я тот анон, что неделю назад начал учить погромирование с нуля. Услышал что среди тренировок питонистов есть задача на написание симулякра передачи Монти-Холла. Зацените как у меня получилось, норм или нет https://pastebin.com/VUsWEF3r
Теперь надо придумать как автоматизировать основной код и прогнать его пару тысяч раз, если будет 67% значит все верно. А если нет, то зря старался, пять часов его писал. И это моя третья попытка уже.
>>2011995 Там все тусуются и деды 55 лвл есть. Но там делать нехер, негатива полно, порнухи и вообще это лютая прокрастинация. >>2012012 Ну попробую как дойду до алгоритмов в книжке, а то я только только начинаю свой путь
Пишу свою первую программу на Python. Суть в следующем: через tesseract считываем с определенного участка на картинке слова. Когда машина видит определенные слова (условно, это слова "хуй", "говно", "моча"), он нажимает на соответствующую кнопку в своем интерфейсе (кнопка 1, кнопка 2, кнопка 3. каждому слову определенная кнопка). Интерфейс написал на pyqt5, через tesseract находить и выводить нужные слова в консоль при их обнаружении научился. Как мне теперь всё это дело связать и забиндить?
>>2014828 Хуню спизданул Ести ты про потоки и async/await то похуй, надо смотреть что в данном случае удобнее, они и вместе используется, а в asyncio есть функция которая запускает данную функцию в отдеоьном потоке
как запустить эти две строчки одновременно? circlevis в цикле отрисовывает кружочек и рандомит ему радиус, а (pyttsx3) speck_engine.runAndwait озвучивает текст через встроенного в винду синтезатор речи. Как сделать так, чтобы circlevis работал во время синтеза речи?
Подскажите как в этом коде https://pastebin.com/yRTHa5kd сделать обработчик ошибки, если сервер не отдал в json prefixes, то этот запрос переотправить?
>>2007247 Обожаю снг за бесконечный форс антинаучной лабуды. Просто перечислю вещи о которых ты даже не в курсе: - понятия интеллекта не имеет под собой биологически объективных обоснований, это что-то уровня души и прочих эфемерных сущностей, в мозги вообще НЕТУ никаких носителей интеллекта - выводить ум на основе школьных тестов уровня выберите треугольники/линии/кружочки это простейшая манипуляция уровня предсказаний по гороскопам, поэтому я их и сравнил, никакой объективной основы у айкью нету, его результат просто показывает что человек успешно решает тесты на кружочки, а не то как успешно он решает косплексные задачи в жизни
Учитывая что важность айкью я постоянно слышу от каких-то токсичных лузерков с комплексами до неба, не надо быть гением чтобы понять почему им так отчаянно хочется хоть в чём-то чувствовать свою значимость. Хоть в какой-то сферической циферке изи набиваемой практикой тестов.
И да, на досуге подумай почему люди со средним айкью имеют миллиарды, а ты работаешь обычной макакой у бизнес кабанчика.
>>2016196 >- выводить ум на основе школьных тестов уровня выберите треугольники/линии/кружочки это простейшая манипуляция уровня предсказаний по гороскопам, поэтому я их и сравнил, никакой объективной основы у айкью нету, его результат просто показывает что человек успешно решает тесты на кружочки, а не то как успешно он решает косплексные задачи в жизни Корреляция очень большая. Есть правда проблема, общая со всеми тестами - тесты работают хорошо, пока к ним целенаправленно не готовятся. Если же ты целенаправленно начинаешь задрачиваться на задачки по выборке треугольников по признакам, выучиванию сложных слов и т.п., ты себе добавишь в 10-20 баллов IQ легко, но сильно умнее от этого не станешь. Да, немного прокачаешь свои возможности, но не на 10-20 баллов.
Смысл в том, что если у тебя мозги заточены на абстрактное мышление, ты способен решать сложные задачи, ты много читаешь и думаешь, то решать простые задачки тебе будет легко, у тебя будет большой словарный запас, ты будешь легко строить ассоциации, выделять общие признаки т.п. А если ты скуп на мышление, то с этим будет всё хуже.
Это действительно так. Но, проблема в том, что как только появляется мотив, так сразу можно задрачиваться на тестирование и оно перестаёт адекватно показывать результат.
Сейчас, когда говорят про IQ, всё-таки больше говорят в отрыве от теста. Просто о мыслительных способностях.
>>2016196 >И да, на досуге подумай почему люди со средним айкью имеют миллиарды, а ты работаешь обычной макакой у бизнес кабанчика. Если в Раше, то потому, что тут миллиарды у тех, кто в юности вместе с Пыней пиздил по подворотням ботанов всяких. Понятно, что это с интеллектом скорее обратную корреляцию имеет.
Но если ты просто пиздил чмошников, но с Пыней знаком не был, ты миллиардером не стал бы.
Кстати, если посмотришь на миллиардеров первой формации, то вылез сам наверх в бурные времена, а не по дружке с П, то там в основном все хорошо образованные. Березовский был вообще дфмн и профессором-математиком, даже членкорром РАН, но это вероятно уже прикупил, как деньги появились, Ходорковский, Дмитрий Зимин. Павел Дуров вот олимпиадником был.
В США тоже коррелят сильный. Интеллект выше среднего, но и происхождение и умение строить связи важны, конечно. То есть супер интеллектом в плане решения задач ты другие способности за заменишь. Хотя умение выстраивать отношения это тоже интеллект, просто он тестом не изменяется.
Месяц на Питоне, объясните дауну, зачем нужны раздельно функции и методы, ведь это кажется тупо неудобным. Например, есть переменная:
>word = 'hello'
С ней можно сделать, например, подсчет символов:
>len(word)
Или заставить писаться с большой буквы:
>word.upper()
Уже три недели вникаю в ООП, понимаю, что в Питоне word автоматически становится объектом, который усваивает методы класса Str, но все же - кто скажет, кому пришла в голову идея делать так запутанно вместо единого формата, например:
>len(word) >upper(word)
или
>word.len() word.upper()
Это какая-то знаменитая пайтоновская логика, упрощающая кодинг? Насколько знаю, в других языках такой путаницы нет (могу ошибаться).
>>2016436 >Месяц на Питоне Скорее всего и месяц в программировании вообще.
Рано тебе ещё лезть в ООП и архитектуру, ты просто не готов пока. Нарабатывай кодерские скиллы. Не лезь пока в ООП, это тебе пока не нужно и ты не готов.
Через год приходи с такими вопросами, если останутся.
>>2016436 >Это какая-то знаменитая пайтоновская логика, упрощающая кодинг? Насколько знаю, в других языках такой путаницы нет (могу ошибаться). Везде есть та или иная путаница.
Вообще, так сложилось.
len() это базовый оператор языка. upper() это специфичный метод. upper(word) однозначно не вариант по понятным причинам, чтобы глобальное пространство имён не портить.
len() так метод вполне себе вариант и даже если копнуть глубже, именно так и есть, для этого есть метод __len__(self), который и возвращает длину объекта, для своего объекта ты можешь его определять.
Но, есть семантическая разница, как и зачем len() используется, есть разные подводные камни с наследованием и т.п.
>>2016491 Я правильно понимаю (если упрощенно), что функции (типа len(x), round(x), print(x)) - это как-бы методы некого класса классов, этакий GLOBAL_PYTHON.len(word), написание которого отбрасывается, ибо он автоматически имеет власть над всеми типами данным (которые для него - объекты, его наследующие)?
Скорее это просто встроенные функции, которые под капотом для нестандартных объектов реализованы так, что они дёргают специальный метод, который должен быть определён. При этом для встроенных типов интерпретатор может работать более оптимально, не дёргая реально эти методы.
Отчасти тут историческое наследие. Плюс это в плане семантики выделение некоторых особых функций в особый статус.
Например ты можешь делать так: len("world" + "hello") round(1.1 + 10.6) - вычислить что-то без получения промежуточного результата. Если бы у тебя было всё через методы сделано, пришлось бы писать ("world" + "hello").len() (1.1 + 10.6).len() что как-то не очень стройно.
>>2016539 >>2016436 Это не один пример, их дохуя. Сделано это, чтобы не изобретались велосипеды. Хочешь сделать len, имплементь __len__, хочешь сделать итератор - имплементь __iter__ , __next__ и т.д. Т.е. ты встраиваешь свою нестандартную логику в стандартные возможности языка, которые работают ожидаемо.
>>2016579 Да вопрос был в целом о закулисном различии между функциями и методом, бросающимся в глаза новичку разницей в синтаксисе: do(somethig) и something.do() Энивей, последний актуальный вопрос: если методы - это функции классов, то глобальные фукнции к чему привязаны? Вот как анон говорит >>2016611, something.upper() возможен только для объектов класса Str, тогда как len(something) для объектов разных классов. Что позволяет глобальным функциям вытворять такое? Что они вообще такое, по отношению ко внутренним классам (Str, Int, Dict и т.д.?
>>2016614 >если методы - это функции классов, то глобальные фукнции к чему привязаны? Условно, метод - это просто функция, определённая в области видимости класса и принимающая первым параметром указатель на класс
Ты можешь сделать так def func(self): ____print('func', self)
class Aaa: ____pass
a = Aaa() Aaa.func = func a.func()
и это будет работать так, как если бы ты корректно определил метод для класса
Смысл методов в ООП в том, чтобы очистить пространсво имён в первую очередь.
У классов Aaa и Bbb могут быть методы func, но принципиально разные поэтому ты не можешь делать func(a) и func(b), так как функция разная. а вот a.func() и b.func() очень естественно и понятно.
Впрочем ты можешь определить func как def func(self): ____self.func()
и потом вызывать func(a) и func(b), и всё будет работать. Можешь аргументы поддержать без проблем, в питоне это просто.
Но, нехорошо, ты портишь глобальное пространство имён.
>>2016614 глобальные методы лежат в builtins import builtins
Глобальные функции просто обращаются ко внутренним методам класса, например len() от целого числа возвращает ошибку object of type 'int' has no len() , то бишь он просто не находит определенный внутри класса int метод __len__(self) Эти функции подаются как преимущество языка, потому что если у тебя есть пользовательский класс, имеющий природу последовательности, тебе не надо думать как программист выдумал определить длину obj.length() или obj.size(), есть просто общий метод len
>>2003913 (OP) В пятницу перед тем как бросить код в ревью назвал там переменные small_dic и big_dic. Как думаете, ревьюверы оценят или назовут меня пидором? Компа под рукой нет, вплоть до вторника менять что-то не выйдет
>>2017008 Код - это самое последнее место для твоего петросянства, не говоря уж про то, что сама идея назвать две переменные по непонятному "размеру", а не по функциональному назначению, уже и так почти наверняка является хуевой практикой именования с твоей стороны.
Сап, не до конца знаю, корректно ли писать в этот тред по поводу работы с БД в django, но... В БД имеется таблица, в которой нет ключевого поля, но есть поле, которое задано внешним ключом по ключевому полю другой таблицы. По итогу при попытке в models.py прописать что-то вроде field = models.ForeignKey(Table, to_field="fieldid", db_column="fieldId", default=None, on_delete=models.CASCADE) при попытке сделать миграции django выдает предупреждение о том, что пытаюсь добавить non-nullable id без дефолтного значения, хотя оно прописано. Где я накосячил?
>>2003913 (OP) Обосрался с кодом на leetcode, мне он выдал вот такое Что там может использоваться что действительно проверяет обозначенные типы и возбуждает соответствующие исключения из-за этого?
С помощью питона генерирую команду для ffmpeg. Потому что я не умею в batch. Высчитывается нужный битрейт для всех видео в заданной папке, чтобы на выходе получить 8мб видео (для дискорда). Всё это делается через for video in videos_list. Вопрос: как эту команду выполнить? Через os.system что-то не завелось. Причём схема такая: выполняется команда, ожидается завершение, запускается команда для следующего видео. Причём генерируемый строковый объект состоит из двух строчек: сначала идёт chcp 1251, чтобы кирилица работала, а затем уже строчка для ffmpeg. Код не кину, ибо не дома.
Подключаюсь к локальной postgras sql в докер кидает ошибку что мой локалхост не принимает 5332 порт. Хотя все открывается в sql клиенте на том же порте. В чем может быть дело? Зашёл в контейнер проверить че там в кофеине - все принимается стоит *.
>>2018588 Правильно ли я понимаю, что твоё приложение крутится в докер-контейнере?
Проблема в том, что внутри твоего докер-контейнера локалхост это именно сеть внутри контейнера, а не на хост-машине. Ты не можешь так достучаться наружу.
Есть тут гуру Pandas? У меня есть словарь вида: {some_group1: [{a: 1, b:4, c: 5}, {a:9, b:0, c:4}, ...], ..., some_groupN : [{a: 3, b:7, c: 0}, {a:8, b:2, c:6}, ...]} Мне надо получить такой датафрейм как на пикрилейтеде. Как это сделать? Пробовал через pd.concat({k: pd.DataFrame.from_dict(v) for k, v in df.items()}, axis=0), но выгляит как-то не так. Some_group общей должно быть колонкой, а не индексом.
Есть простая цель: скачать пдф по ссылки, отправить этот пдф в гугл клауд на извлечение текста, повторить это много много раз.
Проблема в том, что гугл клауд не хочет распознавать больше, чем 10 страниц. Ладно бы он сам брал первые 10 страниц, и возвращал хотя бы их, хуй там, возвращает ошибку.
Похуй, стал искать библиотеки, которым можно обрезать количество страниц в ПДФ. И с какого то хуя каждая блядь библиотека ожидает, что я буду передавать ПДФ как путь к файлу, а у меня уже ёбанный ПДФ загружен в память, я его блядь скачал.
Окей, нашёл PyMuPDF, он принимает на вход пдфку из памяти. Но ккогда я удаляю эти лишние страницы, а после этого хочу обратно выгрузить ПДФ в память для некоторых ПДФ я получаю ёбанные ошибки, типо: RuntimeError: only Gray, RGB, and CMYK colorspaces supported или pdf device does not support substitute fonts
Вот хули ему надо бля? Его дело просто убрать лишние страницы и вернуть всё остальное. ХУли он выёбывается то? Пробовал метод document.scrub(redact_images=2), который должен удалять чувствительные данные, в том числе ебучие изображения, но нихуя. Он как ругался на недопустимое цветовое пространство, так и ругается.
Собственно, вопрос: можно ли как то PyMuPDF жрать все пдфки? Если нет, есть ли какая то библиотека, которая гарантированно жрёт любое пдф, при чём загружать в неё пдф можно из памяти, а не из диска?
Можно ли сделать groupby датафрейма без всяких аггрегаций и примерения прочих функций? Просто сгруппировать по значению одной из колонок? Без всякий count(), sum(), mean(), apply() и прочих вещей?
Есть шаблон заказ-наряда для СТО Нужно чтобы питон сам подставлял нужные значения и печатал в PDF Как это можно реализовать? (Желательно чтобы состыковать с Qt)
>Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
Я могу прикинуть план как получить df3 в sql, но не знаю как с помощью пандас, хелп.
Типо сначала union по первым трём. Потом лефтджоиним по этим трём сначала с df1 -> получаем таблицу из 4-х колонок добавлением color. Лефтджоиним с df2 опять же по первым трём полям-> получаем искомое. правда там Null'ы будут, и хотелось бы без них тоже, но ето не критично
Как пофиксить ModuleNotFoundError: No module named 'rss_reader.parser'; 'rss_reader' is not a package Пробовал импортировать разными способами,но у меня ничего не получилось
>>2019660 Да, всё установленно. Импортировать нужно в rss_reader.py и видимо возникает какой-то конфликт из-за того что имя модуля и имя пакета совпадает
>>2019697 Проблема в том что нельзя переименовывать, иначе не проходит чек в пулл реквесте.
Еще прикол в том что если в setup.py добавить консольный скрипт, то через него еррор на импорт rss_reader. не выскакивает, а при дефолтном вызове да. Тоже самое только наоборот если просто импортировать parser и feed (без rss_reader.)
Анончики, помогите плз ньюфагу. Работаю с модулем argparse. Проблема заключается в том, что метод add_argument удаляет из вводимого через командную строку аргумента символ ^. Вот, скажем, ввожу в командной строке следующее: python module_name 2^2 Получаю (через вывод parse_args()): Namespace(argument='22'). Как пофиксить?
>>2019703 Во втором случае там проблема именнно с импортом parser, так как в дефолтной библиотеке есть такой модуль. Можно как-то заставить питона юзать мой parser, а не из дефолтной библы? Или тут проще его как-то по другому назвать и не ебаться?
Всем привет. Подскажите новенькому. Собрал докер образ через Дженкинс то есть элементарный пайтон система с пакетами. Собралась спустя 5 минут. Вопрос. Могу ли я использовать эту Джобу каким-то образом сейчас чтобы запустить на ней Питон скрипт? Или нужно этот Билд где-то хостить типа докерхаба?
>>2019766 Докерхаб нужен для хранения образов, а не для их запуска.
Собранный контейнер можно запустить локально, если у тебя установлен докер. Впрочем если бы не был установлен, то ты бы не смог собрать контейнер.
через команду вроде docker run -it my_python_image
Запустить скрипт внутри контейнера сложнее, потому что сначала надо его расшарить внутри контейнера
docker run -it --rm -v $(pwd)/my_app:/app python:3.9 python3 /app/app.py
пример команды, если у тебя приложение лежит в папке my_app, а называется app.py
Это в линуксе, в винде вместо $(pwd)/my_app надо будет полный путь к папке указать.
На самом деле не понятно, зачем тебе докер для этого, в чём то проще его установить в систему и пользоваться virtualenvs, если тебе надо опыты ставить с разными пакетами. В винде питон работает довольно хорошо.
Потому что иначе сначала надо более-менее нормально с докером разобраться, а на это время надо.
>>2019782 Спасибо. Мне нужно чтоюы все в команде могли запускать мои тесты. Для этого я собираю Дженкинсон образ/билд через Пайплайн. Сейчас он показывает что все собралось успешно на дженкинсе. Вопрос, могу ли я как-то сейчас использовать этот билд для питон скриптов которые тоже находятся в репо уже? Я понимаю что если бы у меня был докерхаб я бы туда положил собранный образ/Билд и потом тесты бы просто запускал используя агент Докер. Но можно ли как то это сделать без Хаба а чисто в дженкинсе? Может модно как-то тригирнуть тесты чтобы они бегали по этому образу который уже был собран в дженкинсе?
>>2019916 ну так и надо, учитывая что я вопрос не совсем верно задал я вообще со строками работал где это плюсование не делает дел дошло очевидное, нужно убрать [:] из a[:] = x[:2] + x[2:]
>>2019935 [:] позволяет перезаписать объект, а не создавать новый.
Разница принципиальна, когда у тебя несколько ссылок на объект, например у тебя твой список в каком-нибудь классе хранится или в другом объекте. Либо когда ты передаёшь его в качестве аргумента в функцию.
могут работать принципиально по-разному. В общем тут это главное, а что там память выделяется или не выделяется это ерунда полная и не надо об этом думать. Скорее всего у тебя в любом случае какой-то промежуточный список создаётся и под него выделяется память.
>>2019703 Переименовать свой пакет Переименовать скачанный пакет в site-packages Перетащить нужный код к себе проект в пакет с другим именем Поменять приоритет путей в sys.path чтоб сначала искал в сторонних либах Так же можешь попробовать покопаться в родной либе importlib, наверняка там можно соорудить импорт из конкретной папки
>>2020351 А зачем ты нахуевертил это ооп и логи? Там в десяток строчек всё делается. Начни с простого, потом наращивай мяско. Стандартный подход примерно такой next = url while True: page = get(next) #парсим next = ищем ссылку на следующую страницу. Если её нет, то само останавливается.
Как на питоне сделать данную хуйню? Я заебался уже, не понимаю какой gui выбрать, синтаксис за две недели хуй нормально выучишь, да ещё и препод пока что не разрешает мат. библиотеки использовать. Вообще мы на делфи всё это делаем, но препод на питоне разрешил. Захотелось вкатиться... с переходом потом в научный питон. Помогите аноньчики, лабы уже горят
Пацаны посоветуйте гайд какой-нибудь или книженцию чтоб быстро вкатиться в понимание субд, не язык sql, а именно индексы, отоношения, представления, все такое
>>2020862 Ну у меня модуль парсера в пакете, который установлен. Я менял код в функции main и в в модуле парсера и получал ошибку parse_args() takes 1 positional argument but 2 were given потому что в версии пакета которая установленна parse_args() принимает один аргумент.
>>2003913 (OP) Чуть больше месяца учу питон. Дошел до главы про API. Думал смогу написать скрипт для выкачивания музыки со страницы ВК. Загуглил скрипты, оказалось нет, для меня слишком рано. Но из за любопытства скачал один скрипт с гитхаба. Так вот очевидно скрипт просит авторизацию на страничку (без авторизации пользователя ведь нельзя обращаться к данным в ВК, верно?) Вообщем авторизировался, скачал музло скриптом. Через несколько минут пришло письмо, что кто то авторизировался на страницу через Firefox, хотя у меня Chrome. Я еще нуб в этом деле и не догоняю до конца, может быть это просто ВК распознал мою авторизацию через скрипт как авторизацию через Firefox, или скрипт все таки отправил мой логин и пароль тому автору? Может кто шарит зачекать данный код и сказать есть ли там подстава? https://github.com/dvjdjvu/vkMusicDownloader/blob/master/src/main.py