Это копия, сохраненная 13 августа 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1647702 (OP)
Литература:
Автоматизация рутинных задач ч.2 - https://anonymousfiles.io/3CBCoy1o/ <-- тут только одна книжка. Кто может, залейте её на ЯД к остальным.
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kyvi https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
текущая версия (№85) здесь: https://dumpz.org/c6qHxAwADZYW
>Да, смотри на фреймворк Kyvi
Бля, добавить всего две строчки и обосраться
Kivy
исправленный шаблон https://dumpz.org/cAaW2nPySYyy
Какой самый лучший способ разделить словарь на части по n элементов, исключая преобразования в список? То, что у меня получилось, выглядит как-то всрато.
Тебе именно итератор нужен?
Вообще глянь модуль itertools, там много чего интересного:
https://docs.python.org/3/library/itertools.html
Я бы оформил так
По сути тоже самое, просто не понятно, зачем ты лезешь в эти низкоуровниевые вызовы iter-next, когда в словаре есть встроенные итераторы именно для этого.
Дан файл f, компоненты которого являются целыми числами. Найти позицию последнего числа, не превышающего числа b
https://repl.it/@allpickan/Python-3-9
Вроде в Community поддержки других языков нет, например JS. Хотя не знаю, не пользуюсь.
Жить можно и на вскоде.
Там же у них есть триал, попробуй его.
Мне в начале очень сильно помогал пучарм именно платная версия, когда сам научился все делает и без его плагинов, то перешёл на вскод/обычную версию.
А, окей.
Определите и выведите средние баллы участников олимпиады в 9 классе, в 10 классе, в 11 классе.
Информация о результатах олимпиады записана в файле, каждая строка которого имеет вид:
фамилия имя класс балл.
Аноны, посоветуйте как лучше хранить данные в таком случае:
Сделать класс с полями:
1) Номер класса - число
2) Оценки - лист
Или сделать словарь с ключами 9, 10, 11, а элементами будут списки, и в эти списки добавлять оценки?
Или без разницы чем пользоваться - хоть двумерным массивом? Как бы вы поступили?
Преподаватель с курсеры советовал посмотреть на named tuple, но я как я понял из документации модуль collections не поддерживается и будет выпилен в следующих версиях. Ему на смену пришел collections_abc , но там я ничего не понял.
В файле test несколько строчек, но с данным кодом выводится только вторая. ЧЯДНТ?
Если вместо цикла for юзнуть read() то все в порядке
https://dumpz.org/b6ZAQ8BSn4be
имеется в виду, что эти классы (https://docs.python.org/3/library/collections.abc.html#collections-abstract-base-classes) перемещены в новый модуль, и из коллекшнса их выпилят
никто популярную либу убивать просто так не будет, сломав кучу кода
так что с говном типа всяких ткинтеров, асинкоров и итертулсов пайтон 3 останется навсегда
используй неймфажный тупль, самое то
еще можешь выебнуться перед одноклассниками и заюзать dataclasses, но это в твоем случае то же самое, по сути
Да, и если без лупа делать копипастой чтения-печати, тоже все работает.
Отлично, спасибо!
вот тут все базовые аспекты языка с самых основ и до ооп, да на неплохой и интересной практике
https://www.coursera.org/learn/interactive-python-1
https://www.coursera.org/learn/interactive-python-2
А есть, где сразу начинают с ООП? Я уже уил немного плюсы, не хочется тратить время на жевание воды.
вот интересный онгоинг, который не требует знаний каких-то либ, при этом сразу ебашит тебя лицом в ооп и programming language theory
https://ruslanspivak.com/lsbasi-part1/
Что это за херня со скобками? Раньше таких скобок не было (во второй версии джанго). С чего они вообще появились? В чем их смысл бля?
Поясните, что значит "выполнение нескольких последовательных операции чтения"? То есть написать await reader.read(1024) как на скрине не прокатит? (для примера сократил код)
Просто нужно дожидаться получения пакета полностью и тогда уже обрабатывать, а не считал-обработал.
Очевидно, должна быть длинна в заголовках или какие-то маркеры конца.
У пакета первый байт - заголовок, следующие 2 - размер пакета, затем тело и последние 2 байта - контрольная сумма. То есть должно получиться что-то типа этого?
package_size_raw = await reader.read(3)[1:]
package_size = int.from_bytes(package_size_raw, 'little')
package = await reader.read(package_size)
checksum = await reader.read(2)
Ну вот у тебя while True, лови там новые пакеты, и как только размер уже полученного достигает того что из заголовка, отправляешь на обработку. И т.д.
Смотри в чём дело, и это актуально для всех языков программирования. Когда на сокет клиента приходит какой-то пакет данных, система сразу отдаёт ему столько, сколько может.
Но данные по сети идут по частям, они дробятся, это нормально.
Ты когда делаешь recv/read или что-то ещё, можешь получить только часть пакета, а можешь и весь, как повезёт.
Число в скобках означает максимальный размер пакета.
В сети идут отдельные ip пакеты, и размер каждого обычно MTU, который примерно 1500 байт вместе с заголовком. Поэтому если ты шлёшь пакет в 2 килобайта, он скорее всего будет разбит.
Если 1 килобайт, то скорее всего он придёт целиком, но ты не можешь на это закладываться.
Как с этим работать: собирать всё в буфер, и как поймёшь, что к тебе пакет целиком пришёл, так и отправляешь его на обработку.
мне кажется так надо - ставиль read(2000), после каждой операции пришедшие данные добавляешь в буфер.
следующей строчкой, если размер буфера больше минимального (3-5 байтов), вычисляешь размер, и если буфер больше этого размера, вырезаешь из него пакет и отправляешь на обработку.
Забыл добавить - в доке написано что максимальная длина пакета 1000 байт
>А по сколько байт лучше разбивать куски, которые собираются в буфер?
Ставь максимум, который можешь переварить, хоть мегабайт. Если придёт данных меньше, ты просто на выходе получишь меньше.
В любом случае потом отправишь в буфер, а буфер уже обрабатываешь.
Да нисколько в общем то. Просто делать нечего на карантине. Решил запилить, что нибудь хардкорное на питоне в свободное время. Комплекс неполноценности перед борщехлебами
А если у меня есть namedtuple1 с полями Field1, Field2, Field3, то могу ли я через цикл
for field in (Field1, Field2, Field3):
__ namedtuple1.field.append(1)
Получать доступ к объекту в этом поле? Например если у меня в полях лежат списки. В словаре такой подход возможен, в тут ошибка потому, что field в теле цикла не заменяется на значение из (Field1, Field2, Field3)
Или пользоваться словарями и не ебать мозг?
Хочу написать сервак на питоне для анонимного чата. Опыт в питоне хороший (тк в основном под написание протоколов для связи с контролерами его юзал), но серваки пишу первый раз
идея норм или лучше сразу смотреть в сторону шарпов/крестов/жавы? какие камни? понятно что си++ проебу в скорости, но где, например, будет четка граница нагрузки, после которой можно будет с уверенностью сказать: "все, пиздец, на справляется"
спасибо
Если выбирать между джавой и шарпами, то определённо питон. Не знаю как там работа с сокетами в плюсах но подозреваю с плюсами питону не тягаться. Но если тебе не столь важно какой язык выбрать, есть более специализированные языки для реал-тайм приложений, которые будут в разы быстрее плюсов.
> "все, пиздец, на справляется"
Когда юзеры поймут что гроб-гроб-пизда.
Но ты ж понимаешь что этого не произойдет.
Хочешь познать пистон с этой стороны - пиши свой серв.
Советую чекнуть торнадо.
>есть более специализированные языки для реал-тайм приложений, которые будут в разы быстрее плюсов.
это какие?
> понятно что си++ проебу в скорости,
Нет, не понятно, тут не числодробилки. Тебе надо сеть обслуживать, в этом затыки. На сколько пользователей ты хочешь чат делать?
Хайлоад большая тема. Там много всего, и не только от одного языка программирования всё зависит, но и от MQ, баз, балансировщиков нагрузок и прочей хрени.
Порядок величин такой, что 1000 клиентов и на одном потоке вытянуть можно, это ещё не хайлоад.
Тебе надо изучать асинхронное программирование с asyncio, и какой-нибудь фреймворк вроде aiohttp.
перейти по ней с помощью requests, возвращая код запроса и ловя эксепшны
все гениальное просто
Технически устарел.
Вот тут объяснение есть:
https://habr.com/ru/company/avito/blog/435532/
>>57358
>Вполне себе успешно юзают данный инструмент.
Был актуален раньше, пока не развилась штатная асинхронность в питоне. Сейчас скорее поддерживают старое, сложно мигрировать скорее всего.
Почитаю, окей. Уже как-то читал, надо освежить.
Был пару месцев назад на собесе в одной локальной, продуктовой компании, gurtam, искали повидло на сервер их, так вот, вполне себе активно юзают торнадо т.к. им нужен постоянный конект.
Что с ними всеми сейчас случилось, интересно
Пистон 3, кстати, но код очевидно содержит легаси ибо не вчера они появились.
Исходя из их слов у них там микросервисы, так что была надежда на то, что новое пишется на 3,6+, все таки.
Пошли на колбасу.
>Особенно первую строчку
10^0 % 13 == 1
10^1 % 13 == 10
10^2 % 13 == 9
10^3 % 13 == 12
Дальше первой строчкм не читал.
Пишу приложуху на Kivy и вроде бы треды нормально запускаются и работаю.
Нахуя столько возни в питоне вокруг async ?
Если приложение не серверное, нормально же будет запускать в треде опросы и вычисления ?
Питон и мобильную разработку пока знаю плохо, но в целом не новичок
https://dropmefiles.com/Koc5p
Просто сканирует все qr-коды, которые видит и выкладывает на экран.
как же я заебался просто его компилить из гитхаба!
очень мало инфы в инете и приходится постоянно экспериментировать и думать
я не одмин, но возможно chocolatey тебе поможет. а именно инструкции для мейнтейнеров, как там пилить собственные сценарии установки
>заебался просто его компилить
>очень мало инфы в инете
вся суть кивей. вечный не продакшнреди. я в шоке, что оно до сих пор живо, с таким-то подходом
щто поделать.
он реди, просто в гугле не будет ответов сразу на все вопросы начинающего.
Надо читать код и думать.
Все равно намного лучше чем джаву дрочить ради не очень то важных преимуществ.
>нормально же будет запускать в треде опросы и вычисления
Если тебе удобно с тредами - то нормально. И с сетями в тредах нормально рабоать, раньше ведь работали.
Просто все задачи сложные с взаимодействием с пользователем, сетью и сервисами конкурентные, в принципе требуют работы нескольких задач одновременно. Дальше выбор, или треды, или асинхронность.
Исключительно кому как удобнее. По мне с тредами гемор большой, тем более, что в питоне они производительность не увеличивают из-за GIL. А все эти thread-save, синхронизации и т.п. гемор и грабли, поэтому я асинки очень люблю.
Но надо ещё чтобы либы асинхронность поддерживали.
> По мне с тредами гемор большой,
вот в этом и суть моего вопроса. Как ты дошел до жизни такой? Почему все питонисты ебнутые?
Любую подзадачу проще закодировать и отладить, если воспринимать в уме или на бумажке как отдельный поток выполнения.
Ну надо иногда чтото синхронизировать, но это же не машину состояний городить для самого себя.
Непонятно, короче.
рискуя вызвать пену изо рта или горение жеппы у бывалых обывателей, задам вопрос, который наверняка вам задавали. так вот, решил я, значит, изучать питон, понимая в программировании чуть менее, чем ничего. какие актуальные книги/методы есть для полных чайников на 2020 год? какую версию питона надо осваивать? шапку читал, там слишком много книг. посоветуйте одну плез
п.с. английский не знаю. дурак. буду осваивать по пути.
думаю учить на первых порах как хобби, ну а далее - если зайдет - может стану работать.
спасибо, анон. посылаю вам лучи добра
книги - скучно. чтобы не бросить, попробуй степиковский курс.
там два курса.
задания - атас! С книгой не идёт ни в какое сравнение
https://stepik.org/course/67/promo
(Я, правда, сам не пытался это проходить, а сразу начал сразу с курса посложнее)
>Любую подзадачу проще закодировать и отладить, если воспринимать в уме или на бумажке как отдельный поток выполнения.
Так в случае тредов очень условные потоки исполнения. Ты всегда должен думать о том, чтобы твой код был thread-safe, потому что переключение потока может произойти в любой момент времени.
Программирование с async-await по сути тоже самое, но только точки переключения потока исполнения прописаны явно и особых мест для сюрпризов нет. Сильно меньше, чем с тредами.
Во многих языках треды имеют смысл, поскольку они распараллеливают вычисления. Но не в питоне, где треды реально в один поток выполняются.
>Просто все задачи сложные с взаимодействием с пользователем,
вот этого не понел.
Ну вот я сделал на kivy отдельный тред и обновил фейковую бекграундную информацию прямо в объектах гуи - все отлично рисуется и обновляется. Кнопочки жмутся, тредик крутится.
Зачем этим шизикам понадобился отдельный класс Clock и еще какая-то отдельная поддержка asyncio ?
ну в принципе я осознаю, что если я наговнокодю в своем отдельном потоке бесконечный цикл, то скорее всего зависнет все приложение.
На начальных этапах это не очень страшно.
Короче, феномер упорного развития асинхронных фрейворков в питоне - ответ на глобальный лок, который GIL ?
я не понимаю почему.
Всю дорогу я писал линейные алгоритмы Если - ТО - ИНАЧЕ, и теперь вдруг начать думать в виде Машины Состояний?
может я неверное понимаю питоновскую асинхронщину? Предприняты какие-то серьезные улучшения?
Ну посмотри async await.
ну допустим для сервера HTTP это когда ты вынужден постоянно отдавать управление другому коду, хранить промежуточные состояния типа : чтение первой строки, чтение заголовков, чтение тела запроса, отправка клиенту.
то есть, вот https://ru.wikipedia.org/wiki/Автоматное_программирование
или все значительно проще?
а что происходит если написать бесконечный цикл по ошибке?
>Короче, феномер упорного развития асинхронных фрейворков в питоне - ответ на глобальный лок, который GIL ?
Сейчас во всех языках развивается асинхронность, обычно через async-await или близкое, общий тренд последних лет пяти.
Минус многопоточности в том, что переключение потоков происходит в случайный момент времени. Это накладно, надо контекст какой-то сохранять, и это проблемы создаёт по thread-safe, и переключаться потоки могут не туда, куда надо.
О чём ты? В некотором роде у тебя и синхронный код - самая настоящая машина состояний.
Асинки как раз позволяют тебе писать код, который глазами этой ветки исполнения синхронный. Или многопоточный, но с заранее обозначенными точками, где может переключиться исполнение на другой поток. Очень удобно.
>Сейчас во всех языках развивается асинхронность, обычно через async-await или близкое, общий тренд последних лет пяти.
Вообще не понятно почему. Выглядит как возвращение windows 3.11
Точечные применения я могу понять, но зачем навязывать для всех приложений и языков?
В большинстве случаев треды использовались не по назначению, там, где были какие-то блокирующие операции, а не где нужно было распараллелить вычисления.
Асинки не призваны заменить многопроцессность, это разные вещи, причём как раз работа с большим количеством процессов очень хорошо стыкуется с асинхронностью.
Нет, асинхронность для лучшей работы с сетью, чтобы не блочить воркер когда мы идём за данными в базу или по api.
Там ещё сверху появляется две строчки одна текущая вторая во что хочешь переименовать напомните хоткейс
Ну помогите это не гуглится ноль шансов я уже искал это однажды
имхо, хуйня получилась.
я в nginx + lua с тем же успехом ебенейше эффективные приложения делал. он переключается при любом вызове api nginx.
было бы это удобно , работал бы там
Какой смысл от игрушечных примеров, реализовать с помощью select событийный цикл не так сложно, только без синтаксического сахара и нормального api это не применимо в продакшене.
Я делал на селектах что-то для продакшеша, на втором питоне ещё (такой был в проекте), но это ненормально. Так можно один какой-нибудь цикл реализовать для ожидания данных на сокетах, не больше.
Если инструмент очень неудобный, пользоваться им невозможно. Нормальная асинхронность в питоне только с 3.5 появилась, с приходом async/await. С ними пишешь асинхронный код как дышишь, надо только мозги перестроить по асинхронное проектирование.
И по взлёту популярности питона последние годы видно, что многим по душе пришлось.
Конечно, не во всех задачах актуально. Но там, где сервисы какие-то, которые обслуживают много задач, с разными источниками данных работают, это очень актуально.
> С ними пишешь асинхронный код как дышишь, надо только мозги перестроить по асинхронное проектирование.
То есть, придется помучатся.
Не, пока пока не вижу смысла погружаться в это ради гуев.
>То есть, придется помучатся.
>Не, пока пока не вижу смысла погружаться в это ради гуев.
Гуи идеально ложатся на асинкио, при условии, что именно под асинкио сделаны. Потому что внутри гуи тот же принцип используют, цикл обработки сообщений, события, задачи и т.п. А вот если они свой цикл поднимают, как это обычно бывает, то там уже через жопу совмещают, в общем да, надо думать, а действительно ли оно надо.
Так что разумно. Qt и tkinter вроде пока напрямую не поддержали.
>надо только мозги перестроить под асинхронное проектирование
Асинк это типа как просто как современная альтернатива синхронному кодингу с ограниченным применением
Или можно в принципе реально перестроиться и писать любые проекты (хотя бы свои домашние) в асинхронном стиле?
Не всегда понятно зачем, что проекты делают? Если исполнение чётко последовательное, то не нужно. Если есть ветви исполнения, параллельность и т.п., то можно. Про гуи не скажу.
Вообще очень полезно освоить асинхронное программирование, это современный тренд во всех языках. Хуже не станет.
Положим у меня есть картинка, на картинке числа. Числа крупные, многоразрядные. Мне нужно что бы питон брал эти числа и складывал каждый разряд в список, в соответствующий индекс.
Пример:
Число на картинке: 125 436 874
list = [1, 2, 5, 4, 3, 6, 8, 7, 4]
Ну или просто, чтоб распознавал цифры и сохранял прямо сразу числом в какую-то переменную, я просто не знаю как будет проще. В идеале нужно что бы при смене числа на картинке он мог регистрировать это и дальше действовать по условию. У меня такое ощущение, что это можно организовать в 10 строчек, просто нужно знать нужные команды из стандартных либ. Если это так, то скажите просто какие, я и сам смогу.
ну охуеть вообще.
давай ты предметную область опишешь подробнее?
это что за ебанутость? делаешь решатель домашки по матеше для второго класса?
Хочешь распознавания - мучайся с распознаванием. Но это непросто и конечно же срабатывает не каждый раз.
на читай, вроде приличная статья.
https://nanonets.com/blog/ocr-with-tesseract/
если у твое брата совсем хуевый почерк, можешь этот тессеракт перетренировать.
слушай, может быть все дело в том, что питоне есть хороший оператор yield , а в других языках эта концепция неразвита?
этот ваш asyncio основан на yield ?
Господи храни тебя
from bs4 import BeautifulSoup as BS
def save ():
with open('parse_info.txt', 'a') as file:
file.write(f'{comp["title"]} -> Price: {comp ["price"]} -> Link: {comp["link"]}')
def parse ():
URL ='https://www.avito.ru/sankt-peterburg/doma_dachi_kottedzhi'
head ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
global comp
pageObj = requests.get(URL, headres = head)
soap = BS(pageObj.content, 'html.parser')
items = soap.findAll('div', class_ = 'item__line')
comps = []
for item in items:
comps.append({
'title': item.find('a', class_= 'snippet-link').get_text(strip = True),
'price': item.find('div', class_= 'snippet-price-row').get_text(strip = True),
'link': item.find ('a', class_= 'snippet-link').get('href')
})
for comp in comps:
print(f'{comp["title"]} -> Price: {comp ["price"]} -> Link: {comp["link"]}')
save()
parse()
ОШИБКА
Exception has occurred: TypeError
request() got an unexpected keyword argument 'headres'
File "C:\Users\Harkaman\Desktop\Parser\Parser.py", line 15, in parse
pageObj = requests.get(URL, headres = head)
File "C:\Users\Harkaman\Desktop\Parser\Parser.py", line 31, in <module>
parse()
=============
Пытаюсь запарсить авито , но получаю такую хуйню. Поскажите , что делать. python 3.6.4
from bs4 import BeautifulSoup as BS
def save ():
with open('parse_info.txt', 'a') as file:
file.write(f'{comp["title"]} -> Price: {comp ["price"]} -> Link: {comp["link"]}')
def parse ():
URL ='https://www.avito.ru/sankt-peterburg/doma_dachi_kottedzhi'
head ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'
}
global comp
pageObj = requests.get(URL, headres = head)
soap = BS(pageObj.content, 'html.parser')
items = soap.findAll('div', class_ = 'item__line')
comps = []
for item in items:
comps.append({
'title': item.find('a', class_= 'snippet-link').get_text(strip = True),
'price': item.find('div', class_= 'snippet-price-row').get_text(strip = True),
'link': item.find ('a', class_= 'snippet-link').get('href')
})
for comp in comps:
print(f'{comp["title"]} -> Price: {comp ["price"]} -> Link: {comp["link"]}')
save()
parse()
ОШИБКА
Exception has occurred: TypeError
request() got an unexpected keyword argument 'headres'
File "C:\Users\Harkaman\Desktop\Parser\Parser.py", line 15, in parse
pageObj = requests.get(URL, headres = head)
File "C:\Users\Harkaman\Desktop\Parser\Parser.py", line 31, in <module>
parse()
=============
Пытаюсь запарсить авито , но получаю такую хуйню. Поскажите , что делать. python 3.6.4
import requests
from bs4 import BeautifulSoup
#def save ():
# with open('parse_info.txt', 'a') as file:
# file.write(comp)
def parse ():
URL ='https://www.avito.ru/sankt-peterburg/doma_dachi_kottedzhi?cd=1'
HEADERS ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
response = requests.get(URL, headers = HEADERS)
soap = BeautifulSoup(response.content, 'html.parser')
items = soap.findAll('div', class_ = 'item__line')
comps = []
for item in items:
comps.append({
'title': item.find('a', class_ = 'snippet-link').get_text(strip = True),
'price': item.find('span', class_= 'snippet-price.snippet-price-vas').get_text(strip = True),
#'link': item.find ('a', class_ = 'snippet-link').get('href')
})
global comp
for comp in comps:
print(f'{comp["title"]} -> Price: {comp ["price"]}')
parse()
Я уже передал , теперь другая ошибка
Exception has occurred: AttributeError
'NoneType' object has no attribute 'get_text' в price
import requests
from bs4 import BeautifulSoup
#def save ():
# with open('parse_info.txt', 'a') as file:
# file.write(comp)
def parse ():
URL ='https://www.avito.ru/sankt-peterburg/doma_dachi_kottedzhi?cd=1'
HEADERS ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
response = requests.get(URL, headers = HEADERS)
soap = BeautifulSoup(response.content, 'html.parser')
items = soap.findAll('div', class_ = 'item__line')
comps = []
for item in items:
comps.append({
'title': item.find('a', class_ = 'snippet-link').get_text(strip = True),
'price': item.find('span', class_= 'snippet-price.snippet-price-vas').get_text(strip = True),
#'link': item.find ('a', class_ = 'snippet-link').get('href')
})
global comp
for comp in comps:
print(f'{comp["title"]} -> Price: {comp ["price"]}')
parse()
Я уже передал , теперь другая ошибка
Exception has occurred: AttributeError
'NoneType' object has no attribute 'get_text' в price
>Вротебал переустановил пучения на коммьюнити версию хуйпойми какие шрифты стали какой фрит стандартный на пуперверсии другой разве или чото уже накрутил блять ?
это что-то на языке питонистов?
Тебя не смущает, что у инсталлятора нет достаточных прав?
Устанавливай для всех юзеров в папку С
Хочу начать писать по pep8 и не могу включить линтер в ide.
Остальные два линтера на картинке работают, но заебешься за ними следить.
ладно, отредактировал код этой ебанутой тулзы. Вроде проверяет.
теперь я дохуя pep8-совместим!
прост. Почему бы нет? Инкапсуляция.
Если он вне это класса не нужен, то нахуя выносить?
Что эта хрень делает? Двойная звезда "раскрывает" словарь это я знаю, но в чем смысл всей этой конструкции, в особенности метода __dict__ (почему-то без скобок и без аргументов)
Бля, проебалась двойная звезда перед object.__dict__. Ну вы поняли...
Ещё можно делать "фабрику классов" и возвращать этот класс для дальнейшего использования.
Это не метод, а словарь
https://docs.python.org/3/library/stdtypes.html#object.__dict__
object.__dict__
A dictionary or other mapping object used to store an object’s (writable) attributes.
Есть список и есть массив.
Список необходимо использовать тогда, когда нам нужно удалять и добавлять туда данные, совершенно понятно, почему в данном случае тут сложность O(1)
Массив нужно использовать когда нам необходимо получать доступ по индексу, но суть в том что в питоне я также могу получить доступ к списку по индексу
list = [1, 2, 3]
print(list[0])
Тогда почему доступ к элементу в массиве - O(1), а в списке O(n)?
Потому что ты не врубаешься в dinamic array, static array и linked list
Буквально в прошлом треде вроде это обсуждалось
да, list - это не linked list, тебя наебал сам Гвидо
именно поэтому питон не стоит брать как первый язык
массив - это структура данных
список - абстрактный тип данных
в питоне списки реализованы поверх массивов, такие дела и сложность там O(1)
https://wiki.python.org/moin/TimeComplexity
жс-макаки прекрасно без этой белиберды дедовской обходятся
да
зачем задавать вопросы на сайте для школьников, когда есть подробный ответ на stackoverflow?
https://github.com/python/cpython/blob/e5014be0497d06d78343623588a80f491a6f7b74/Objects/listobject.c#L22
ну тут соглы
Но почему ты называешь си пидарством?
Код из else можно перенести вниз try, а finally вовсе снизу вне блоков написать?
Я ещё могу понять else - чтобы исключение в else обрабатывалось внешним обработчиком ошибок вне моего except, но какой смысл в finally?
> finally вовсе снизу вне блоков написать
Подумай сам, если код в finaly зависит от того, выполнится ли try - то при переносе кода вниз - ты можешь выполнять операции с None, или городить очередные проверки
finally выполняется всегда, в том числе если исключение не было перехвачено, или было перезапущено. Соответственно код, который вне try-except-finally в этом случае вызван не будет.
>Вот так что ли? Оно выводит 1-2-4.
Да, у тебя не печатается 3, в этом и отличие с finally
Обычно конструкция не такая, а try блок находится внутри какой-то функции. А внешние try блоки уже не в этой функции, а где-то сильно выше в коде, откуда функция-метод вызывается.
Исходное назначение finally главным образом в том, чтобы корректно и во всех ситуациях закрыть какие-то ресурсы, которые ты открыл в try-блоке.
Возможно расширение файла отличается от песни к песне, сейчас оно всё в десятигиговом архиве. Надо сделать: скопировать audio.mp3 (чтобы решить проблему расширений надо будет wildcard какой-нибудь?), в другую папку, переименовать его в название папки без цифры в начале. Задача совсем простая, но я не программист. Подскажите, что делать? Простой цикл for? Библиотек кроме os не надо? Питон не знаю, насколько сложно будет?
Electron
WinForms
>Код из else можно перенести вниз try
Сам-то понял, что сказал?
>finally вовсе снизу вне блоков написать
Скажу больше: иногда вообще юзается только конструкция из try и finally. Каково? потому что finally может гарантированно закрыть некий ресурс
>увеличить шаг вырезки
на 5-10 см, без смс и регистрации
У тебя ж есть еще переменные помимо x, Алеша! Увеличивай
чтото странное делаешь. почему бы не показать весь код? намерения не ясны.
тут у тебя ругается на то, что ты собрался складывать одно число int и срез.
Ого спасибо...
>Вот, пожалуйста, та же самая программа, но переработанная под язык Python:
Это шо, сикп пиздон?
виндоблядь должна страдать
Ну и зачем ты за него всё написал? Может ему бы понравилось и он мог попытаться вкатиться.
С короной этих вкатывальщиков уже некуда девать.
Надо перепрофилировать заводы по сжиганию фотографов.
Ну тогда ладно сикп питон я нагуглил вот https://wizardforcel.gitbooks.io/sicp-in-python/content/
После короны на оборот количество говнокодеров вырастет .
Есть желающие за деньги на карантине тупой не сильно женщине за деньги дистанционно физическая локация спб через дискорд/скайп/tmv etc попреподавать немного питон? Напишем какой-нибудь парсер для соца или еще какую нибудь хуйню ненужную. Одной скучно, основы погромирования вроде есть, работаю в айти.
стучите сюда если вдруг кто то хочет
Тащмайор, я понимаю, норматив минимум 10 человек в месяц, но не надо
Или просто пусть откроют его через IDLE?
Потому что ты дурачок и сменил ассоциацию на пичарм.
При нормальной установке всё будет работать как надо.
Можно запускать py script.py
А так надо копаться в реестрах-хуестрах. Ну или переустанови шиндовс питон, он поставит обратно свои.
Ты точно пишешь python example.py и у тебя открывается pycharm, а не открываешь файл через консоль?
Как организовать удаление экземпляра из списка и всех словарей? Ставить метку в экземпляре, и элементы с меткой удалять при обходе каждого из этих контейнеров?
>>59606>>59598
Батник же положи рядом, и всё.
Открываешь свойства файла, там есть "приложение", меняешь его с пучарма на python.exe
На выходе из функции получается dict с ключами name и description
Аутпут некрасивый.
Как сделать так, чтобы выводилось исключительно name и description без скобок, имен ключей и так далее, только значения?
type(output_movie) - dict
С меня канистра чая!
уже пофиксил аутпут :)
Не работает в этом киви абсолютно нихуя! не могу больше.
https://github.com/kivy/plyer/issues/500#issuecomment-595756815
Что этот пидор тут форкнул? как правильно его наработки взять ?
низачем, просто кто-то вот так написал, показалось ему что-то или впадлу было норм сделать
лучше просто оставить import tkinter as tk
а from tkinter import * не делать никогда
легаси говно бывает и похлеще
Думал его курс посмотреть по Python, или Django, и он там так косячил будто неделю назад сам только их изучил (имею в виду бесплатные уроки на ютубе)
первая импортирует tk, позволяя вызывать функции типа tk.ttk.shit()
ты не сможешь вызвать ttk.shit() без префикса "tk.", потому что ttk определен внутри tk
чтобы таки смочь, автор импортировал ttk, и теперь в коде можно делать ttk.shit()
третья импортирует всё подряд, включая ttk, так что с ней вторая строчка не имеет ссмысла, но бездумно импортировать всё подряд считается плохо, так как засирает неймспейс и может заоверрайдить какой-то другой функционал, поэтому такие звездочки на позднем этапе заменяют на то, что во второй строке - импорт индивидуальных классов и модулей. либо вообще оставляют один верхний уровень и вызывают всё через.длинную.череду.точек()
ебать, почему не киви?
{
"python.pythonPath": "django_libraryenv\\Scripts\\python.exe",
"python.linting.pylintPath": "django_libraryenv\\Scripts\\pylint.exe",
"python.linting.pylintEnabled": true,
"python.linting.enabled": true,
"emmet.includeLanguages" : {"django-html": "html"},
"[django-html]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "HookyQR.beautify"
},
"python.linting.pylintArgs": ["--load-plugins", "pylint_django"]
}
отчисляйся
и кто сказал бесплатно
Код говно, в условии нихуя не ясно, у тебя 6 часов что бы переписать условие нормальным текстом и я помогу тебе с кодом.
смотри, условия как и код писались индусом, скажи что именно непонятно, попробую разобраться или по крайней мере спросить у препода. Нужно сделать модель симуляции морского порта, в порт заходят корабли трех классов с разной вероятностью и разной временем загрузки\разгрузки. есть еще такой код https://pastebin.com/fXwtC5b9 но не думаю что разница велика
Ну что там сложного-то? Пишешь реализацию очереди, потом симулираешь день за днём:
1 прибыл корабль? ставим в очередь
2 есть корабль на разгрузке? нет: берём из очереди
3 уменьшаем ему остаток разгрузки
4 считаем корабли в гавани
Бля. Я делал такое, это ж симулятор очереди. Ищи короче на CodeWars симулятор очереди ну или похуй что угодно со словом очередь вбивай и там будет похожее
>Скажи, имеет смысл в этом коде копаться, или проще написать все с нуля самому?
У тебя задание написать самому.
Ничего не понял, надо сделать симуляцию, через random()?
Зачем тут numpy и прочее?
Разгружают одновременно только один танкер?
Для выборки с предписанными вероятностями в питоне есть специальные функции в стандартной библиотеке random
Например, получить корабль случайным образом
random.choices(['super', 'medium', 'small'], [0.4, 0.35, 0.25])
аналогично интервал
random.choices([3, 4, 5, 6, 7], [0.15, 0.25, 0.35, 0.15, 0.10])
>Разгружают одновременно только один танкер?
да
>Зачем тут numpy и прочее?
так уж у нас заведено, что на паре объясняют только нампай, а дз дают на работу с пандас или вот например с радномом, при этом не объясняя что такие библиотеки вообще существуют
numpy в примере был использован чтобы например сгенерировать время обслуживание корабля, которое увеличивается по экпоненте
А теперь хочу реализовать какой-нибудь велосипед, чтобы начать понимать, как вообще проектируется софт и библиотеки.
Например - асинхронный серва чок какой-нибудь! Но беда, я не знаю, что мне теперь читать по этой теме...
Знаю очень поверхностно, как работает http, сокеты ну и asyncio офк. Нужно больше теории, как там внутри устроены эти веб фреймворки и как можно закодировать свой простейший аналог?
>так уж у нас заведено, что на паре объясняют только нампай
Возможно что хотят обучить работе с numpy, чтобы потом с ней какие-то более сложные вещи делать. Пусть даже для этих примеров numpy не нужна.
Но знать про такие модули всё равно полезно. Полезны модули random, statistics, itertools - там много чего полезного и интересного. Функционал оттуда часто для учебных задачек дают, проделать самостоятельно полезно, но для продакшен кода штатные библиотеки очень полезно освоить.
>Нужно больше теории, как там внутри устроены эти веб фреймворки и как можно закодировать свой простейший аналог?
При развитых макака-скиллах можно закодировать и не понимая. Но имхо лучше разобраться, хотя бы с принципами asyncio и http. Потом легче будет.
Я бы почитал статейки уровня 'from scratch', вот пару примеров:
https://defn.io/2018/02/25/web-app-from-scratch-01/
https://github.com/hzlmn/diy-async-web-framework
Только аккуратней с этим, потом ты полезешь ковырять tcp и далее по наклонной. Это как с проном: не успел оглянуться, а уже смотришь русское домашнее.
Это ты ещё не пробовал OpenCV с киви познакомить. Я так 2 недели проебал, очнулся, а у меня уже андроид студио, глаз дергается, и Java ко мне сзади пристраивается. Больше к этому говну (kivy) не подхожу.
Какие книги после этого сайта прочесть? Укус питона начал, вроде норм, но там нет упражнений после каждой темы как обычно бывает в старых книгах по программированию.
>Но это проект от хекслета, а его тут вроде как хуесосят, непонятно почему.
Да потому что нахуй не нужны все эти курсы ебучие. Основы легко можно и самому выучить, решая задачки на codewars/leetcode/hackerrank, попутно гугля нужные алгоритмы и разбирая решения от других участников. Выхлопа получишь в несколько раз больше, чем способны дать любые курсы.
И книги по питону для вкатыша тоже нахуй не нужны. Их стоит начинать читать, когда уже имеешь базу и интересуешься конкретными паттернами, например.
Не совсем что что тебе нужно. Если хочешь документацию, есть генераторы документации - пишешь в коде комментарии специального вида, а по ним потом специальная программа с генерирует документацию в удобном формате, там html, pdf, что хочешь. С питоном часто используют sphinx
https://www.sphinx-doc.org/en/master/
> основы можно легко изучить codewars/leetcode/hackerrank
на данных ресурсах только задачки на алгоритмы, которые сильно отличаются от задач обычной разработки.
эти задачи не научат тебя правильно разбивать код на модули и функции, скорее всего тебя даже не научат использовать классы, там не используюется многопоточность, многопроцессность или асинхронность, и уж тем более эти ресурсы не дадут тебе никакого представления о веб-программировании.
никаких основ на таких сайтах изучить не получится, особенно если у тебя мало опыта в программировании в принципе.
> разбирая решения от других участников
зачастую участники данных ресурсов соревнуются в том, чтобы ужать всё решение в одну строчку, так что обучение на их примерах - прямая дорога к говнокодингу
> книги по питону для вкатыша тоже нахуй не нужны; их стоит начинать читать, когда уже имеешь базу
а каким образом ты получишь базу? или по-твоему это априорное знание? я тоже сторонник обучения на практике, но перед этим все равно нужно изучить необходимый минимум теории из курса, статьи, книги или видосика на ютубе
Видел у Лутаца очень много упражнений, сам книгу не читал и не советую, т.к. на мой взгляд, там слишком много воды. Но упражнения можно брать и оттуда
Видел у Лутца очень много упражнений, сам книгу не читал и не советую, т.к. на мой взгляд, там слишком много воды. Но упражнения можно брать и оттуда
Как пройти список с обратной стороны без использования len? Может срез какой-нибудь соорудить?
И есть ли в этом вообще вычислительная польза, если список огромный, а нужный элемент скорее всего ближе к концу?
Интересно, что за энтузиаст именно так решил.
А почему тогда срез быстрее работает (если верить интернету)?
Как так? Слайсы решают задачу извлечения значений из списков. Реверсед решает задачу обратного итерирования.
Работает не быстрее https://ideone.com/g5MmEK
Плюс проеб по памяти.
Просто раньше думал что срезы - это что-то вроде обращения по индексу, а когда вызываешь функцию от чего-то, то интуитивно она должна возвращать новый объект.
Благодарю. Важная инфа на будущее.
Можешь баловаться в интерактивной сосноли - там сразу видно результат.
Кстати, я классы еще не изучал. Чем они от функций то отличаются?
Тупла быстрее через ::-1, чем через reversed, кстати, что я с ней не делаю. И ещё она работает хуже листа, что странно, впрочем, не первый раз подобное замечаю.
Я только создание контейнера вынес из функции - замеряются лишь обращения.
Научите массивы numpy использовать. Хули они медленнее в шесть раз работают - если у них прибит тип и размер гвоздями? Я бы понял ещё в два - из-за того что у них природа апитонная, но не в шесть же мать их.
>Научите массивы numpy использовать. Хули они медленнее в шесть раз работают - если у них прибит тип и размер гвоздями?
У них дорогая инициализация, конвертация из питона в np массив, на это идёт основное время. Вообще код покажи лучше.
Без инициализации и конвертации, просто обход.
https://ideone.com/sWoY9V
Вот с этими числами, а то идеон не пропускал мои. Тут вообще почти в 10 раз замедлилось.
Что любопытно - если использовать np.arange, то работает быстро. А если np.array(range()), то сразу замедляется - хотя массивы полностью совпадают во всех значениях.
Модуль dis ответа не даёт, с его точки зрения тут вообще разницы нет, код извлечения данных из np прописывается как-то в более низкий уровень.
Мне кажется, что тут просто идёт постоянное преобразование типов из кишков np в данные питона. Вот это и занимает много времени. np для этого не предназначен совсем. С такими библиотеками другой принцип работы, как с сервисами, ты должен минимизировать количество операций с ними. Ты записываешь туда данные, потом библиотека сама с ними что-то делает, используя специальные функции.
>ты должен минимизировать количество операций с ними
Угу, операции над нумповскими массивами нумповскими функциями несравнимо резвее, чем списки.
А вообще это костыль тот ещё - нужно в самом деле минимизировать количество операций с этим, другими словами использовать другой язык, который лучше подходит для обработки массивов данных, чем скриптованное говно без типизации. Вышеупомянутая numba хорошо работает с массивами (чуть ли не лучше чем встроенные нумповские операции), на крайний случай.
>другими словами использовать другой язык, который лучше подходит для обработки массивов данных, чем скриптованное говно без типизации
Если вся твоя работа в том, чтобы переложить конкретный тип из одного массива в другой и сделать с ним какие-то стандартные операции - то да, другой язык нужен.
Си для таких вещей хорош и удобен.
Любую задачу можно решить на любом языке, если язык доступ к системе имеет.
Питон, как язык проработан лучше, лучше его базовые структуры данных, словари, списки, туплы, множества, преобразование типов. В JS нет даже словарей и вместо массивов непонятно что. Объекты лишь частичная замена словарям.
Гибкая система передачи параметров в фукции, сравни это с тем, что в JS.
Большая стандартная библиотека, тебе не нужно ради каждой ерунды ставить модуль из npm непонятного автора.
Хорошо налаженное межпроцессное взаимодействие.
Масса вещей делается в питоне просто и красиво, а в JS это превращается в страшный код с кучей затычек и уязвимостей.
А в остальном, на ноде тоже можно писать, жить можно.
Ты поменьше всяких петухой с ютуба слушай.
Конструктивно
Учу питон, мне нравится синтаксис всем кроме одной вещи - выделение блоков пробелами. Как по мне скобки удобнее и нагляднее.
На питоне можно очень быстро слепить проект и он будет как-то там даже работать, чтобы показать заказчику.
А потом всё равно переписать под ноду как-то так оно обычно и бывает
Ибо нода куда более гибкая и быстрая относительно любых пистоновских веб-фреймворков
Ты в слове Java ошибок наделал.
Да но нода = JS, а JS - говно. Почему бы сразу не написать на асинхронном питоне
потому что один язык для фронта и для бэка. Я пока ещё не видел ни одного чистого бэкенд разработчика на ноде, все так или иначе пришли с фронта
Вот и я не понимаю. Он так прекрасен и всеми любим. Но как спросишь, то все сводится к красивому синтаксису
Вот когда броузеры нативно начнут питон поддерживать, тогда и будет тебе асинхронный питон
Еще больше месяца поставил себе PostgreSQL в качестве основной БД в одном из Джанговских проектов. Там когда в settings.py задаешь настройки, надо помимо прочего указать пароль ('PASSWORD'), что это блин вообще за пароль? Где я могу его изменить?.. Я управляю своей БД через pgAdmin, там есть мастер-пароль для входа но это не он... Где и как можно этот пароль для БД поменять?
Ну так добавь юзера.
Скорее всего, суперюзером нельзя так подключаться, только локально через консоль.
Ты пишешь пароль юзера, которого ты указываешь так же в настройках. Если не знаешь пароль postgres то в pgAdmin или в Shell создай нового юзера с нужными правами и на этот раз не проебись с паролем.
Или другой способ погугли как узнать его пароль (но так как ты задал сюда вопрос, я так понимаю, ты не понял, как это сделать)
А еще советую из settings выносить такие данные в отдельный .env
>из settings выносить такие данные в отдельный .env
?
У меня на данный момент так: есть json файл, из которого я достаю этот пароль а также secret_key (на пике переменная POSTGRESS_PASSWORD это значение из десериализированного json). Это норм?
По теме: >>62358 в pgAdmin нашел эту фичу (блин, что-то я больно редко консолью пользуюсь, и часто полагаюсь на сторонний софт, боюсь мне это акнется)
https://ideone.com/EX1Fxz
Как можно сократить этот код?
Зачем? -Не хочу инициализировать пустой дикт, хочу сразу вернуть результат.
Знаю, что можно просто вернуть генератор, но конкретно этот пример с енумом и диктом почему-то не получается адекватно под него переписать... И ещё мне интересны другие варианты, с функцией map, например?
>>62424
Как вариант.
Я думал у тебя все в settings лежит. Да так я думаю без разницы, где ты настройки хранишь, можно даже в .py
На счет этой фичи, в любом случае надо знать пароль. Я бы на твое месте попробовал этого суперюзера удалить в админке, и создать нового такого же. Просто хз, есть ли такая возможность..
В чем же гибкость ноды? Про скорость работы все далеко не однозначно, так как зависит от дохуя чего.
Суть в том, что надо в конфиге, что называется
pg_hba.conf
выставить параметры, которые позволяют логиниться с локалхоста без пароля, после рестартануть сервис, зайти, поменять пароль и включить защиту заново
параметр для этого trust называется.
Точную инструкцию не дам, но она находится в гугле за три минуты.
Я разрабатывал на ноде, не переходя с фронта. Нода довольно удобная штука и функциональная, хорошая платформа, просто сам JS как язык ущербен, нельзя с питоном сравнивать совсем.
Нода реально удобна была для сетевых сервисов за счёт того, что вся на асинхронных коллбэках построена.
Тогда тебе встречный вопрос: как изменить пароль для этого юзера? И как создать нового юзера?
Alter user и create user
Не пустит так просто. Это известная проблема, сам с ней сталкивался, ничего не помогало, но вот такие решения сработали.
Тебе по-моему скучно и ты хочешь боянистые споры очередной раз поднять.
Сама СУБД тебя просто не пустит в настройки базы. Но имея рут пароль, ты можешь изменить параметры доступа через файл pg_hba.conf.
Зачем там что-то менять? Зайди под рутом, потом под постгрес и выполни команды в psql.
Кстати, это пароль не для конкретной БД. И не для самой PostgreSQL. Это пароль твоего юзера (в данном случае "postgres") для подключения к серваку (а их может быть много внутри твоей Postgres)
Достаточно почитать мануал. Зачем вобще в постгрес лезть наобум?
Юзайте рабоче-крестьянский мускл или вообще скулайт.
Сейчас бы считать асинхронный колбэки за плюс, когда во всёх нормальных языках стараются уйти от этой хуйни)))0))
> чел, ты ничего не знаешь ни о жс, ни о бэкенд разработке
Ну давай, тел ми мор.
Вопрос: как их адекватно создавать? Я знаю быдлоспособ: вручную прописать название ресурса myresource, но так у адекватов дела не делаются, это одна из причин почему были придуманы темплейты и джанго-тег url. Создать сами ссылки с его помощью: href="{% url %}" - не проблема. Проблема динамически прописать имя ресурса
Как-то так. Но с зашкварным прописыванием имени ресурса вручную:
<p> The possible url you are searching for is: <a href="{% url 'randomapp:redirect_view' slug_var %}">http://myresource/{{slug_var}}</a> </p>
def get_absolute_url(self):
return reverse("tag_detail_url", kwargs={"slug": self.slug})
Возможно это то, что тебе нужно, можешь как-нибудь изменить под себя
P.S. Метод класса models
Ананасы, с клиент-серверными приложениями незнаком, необходимо запилить два приложения:
1) Сервис, который будет находиться на одной машине, занимать какой-то порт и принимать REST-запросы.
2) Простенькая форма на другой машине, которая будет по клику отсылать REST-запросы к вышеозначенному сервису по его адресу.
Подскажите, пожалуйста, либы (кроме PyQt для формы, его знаю), которые надо курить, от чего отталкиваться, в общем.
Ах да, первый сервис, соответственно, будет после приема отсылать какие-то данные обратно на форму, из которой производился клик.
И только? Вау, погляжу, как это будет работать, спасибо.
В издании 19 года много пишется про разницу между 2.x и 3.x, и изучается конкретно 3.x
В постгрессе есть удобный для меня инструмент postGIS. Есть ли аналоги для други СУБД?
tornado
Я читал Stepik параллельно листая книжку Седер Экспресс-курс. ( Хороша уже тем, что честно в первой главе обьясняет почему питон -говно )
Если ты уже программировал, то нафига эта вода?
А у этих долбоебов оказывается проверка почты сделана чувствительной к регистру. Как такую хуйню могли сделать программисты, продающие курсы?
Да, про него
А неправильные значения чисто try - except обрабатывать?
>python не является лидером по количеству библиотек
какого года это говно?
Истинные проблемы пистона в другом: производительность, ебля с версионированием, отсутствие адекватной многопоточности, хрупкость архитектуры (присущая любым динамическим языкам)
У паблика всегда приоритет, но в случаях когда атрибут действительно должен быть приватным, можно поставить сеттер; геттеры есть смысл ставить при комплексной обработке объекта (очевидно)
Хуярить на каждый чих get_voltage(self) или set_voltage(self, volt) - даунизм
годный вариант обозначать геттеры/сеттеры через декоратор property
2019.
Ну же это правда, библиотеки сначала пишутся на си и на яву, а уже потом на питон.
для первого взгляда достаточно тех проблем, которые в книге уже перечислены.
> Ну же это правда, библиотеки сначала пишутся на си и на яву, а уже потом на питон.
Нет, C сейчас - узкоспециализированный язык, поэтому на нём не может быть такого количества библиотек как на питоне.
Для того чтобы узнать сколько библиотек существует для языка достаточно посмотреть количество репозиториев на гитхабе с количеством звезд > 2k
Спойлер: python в топ 2
конечно троллинг, как ты за минуту покурить успеешь, только если невзатяг
А зачем ты по одному гитхабу делаешь выводы об индустрии ?
Да, гитхаб - единственный достоверный инструмент, но он же не покрывает данные об остальных api.
любая хренюшка, железячка или сервисочек изначально выпускает закрытые api на яве и вероятно, на Си.Тут другая культура.
Ну, мне так кажется.
В любом случае, это второстепенный вопрос.
>в шарпе вообще-то геттеры и сеттеры не используются
Я, похожу, работаю в каком-то неправильном проекте.
Это ты не я, не лезь.
да, но обычно просто говорят "свойства", геттеры и сеттеры - специальные методы для получения значения (getValue, setValue)
>вероятно, на Си
Низкоуровневая параша для дров и МК. Говорю как чувак, когда-то писавший на нем
Хм, ну ладно.
Си порой используется вместе с питоном, например для того чтобы вызвать системные библиотеки из кода как будто это функции питона.
Через локи
а вообще через треды с БД никто не работает, не зависимо от языка, есть специализированные БД, которые это позволяют также есть несколько конкурентных операций как в той же postgres (особая директива CONCURRENT). Целиком на многопоточность хуй перейдешь, скорее всего что-то наебнешь
Просто столкнулся с https://github.com/aio-libs/aiomysql/issues/150 где я так понимаю, что один из разработчиков предлагает прикрутить работу с БД через ThreadPoolExecutor. Насколько эта идея будет хороша?
Полноценной многопоточности там все равно не будет. Не ебу что происходит в майскл, в постгресе имитируется многопоточность засчет кеша и снэпшотов: https://www.postgresql.org/docs/9.1/mvcc-intro.html
Улучшение производительности канешн будет, но не думаю что стоит ожидать всемогущие Треды, бустящие скорость чтения/записи в n раз
https://wonderland.v8.1c.ru/blog/uluchsheniya-v-sintaksise-yazyka-1s-dlya-raboty-s-asinkhronnymi-funktsiyami/
вы там что, ебнулись со своими асинками? что дальше ? qbasic.exe будет поддерживать асинки?
ThreadPoolExecutor используют чтобы вызвать синхонный код из асинхронного.
Если ты будешь делать запрос в постгрю без него, то твоя корутина залочится на время выполнения запроса.
Если через него, то твой запрос будет обслужен в отедльном треде, при этом твоя корутина не залочится на этом месте, а просто передаст контекст управления (если здесь что-то непонятно, то тебе нужно почитать что-нибудь об асинхронности). в другую корутину
Понятно, спасибо.
>>63165
>Если через него, то твой запрос будет обслужен в отедльном треде, при этом твоя корутина не залочится на этом месте, а просто передаст контекст управления (если здесь что-то непонятно, то тебе нужно почитать что-нибудь об асинхронности). в другую корутину
Я понимаю, но вопрос в том, насколько безопасно так делать. Т.е. асинхронные либы я так понимаю, организованы так, что если 2 пользователя одновременно кинут запрос на добавление данных - либа разрулит этот вопрос. Но что будет если такое же произойдет, когда я кину одновременно 2 запроса через треды. но с синхронной либой для работы с БД, как советуют в той проблеме на гитхабе
успокойся, в mysql все нормально. В том числе настоящий MVCC.
этот чувак хочет клиентскую асинхронность ради решения клиентских задач, а не чтобы серверу было легче.
ну он же closed, нафига ты их читаешь?
Конечно, там в обсуждении не понятно был ли ОП просто криворуким пидором или есть реальная проблема в библиотеке, но закрытые issue читать не нужно.
Суть такова: есть потрясающе кривое стороннее API, из которого надо брать информацию. Сделал для этого дела несколько однотипных функций, которые проходят запросами, вызывая себя же, если не дошли до конца. Типа пагинации - не знаю, как оно правильно называется.
И все бы хорошо, но последовательно выполняются довольно долго, т.к. информации дофига.
Решил попробовать потоки и запустить их параллельно. Получилось что-то типа такого:
thread1 = Thread(target=self.db_jobs_update())
thread2 = Thread(target=self.db_orders_update())
thread3 = Thread(target=self.db_customers_update())
thread1.start()
thread2.start()
thread3.start()
thread1.join()
thread2.join()
thread3.join()
Но работает все равно последовательно. Предполагаю, что затык именно в рекурсивности. Если я прав, то куда лучше в этом случае копать?
Вообще есть специальные либы известные, aiopg и asyncpg, предназначенные для работы с постгрей через асинкио.
Асинхронность тут нужна для того, чтобы не блокировать выполнение кода, пока база обрабатывает запрос. Ровным счётом та же история, что и сетевыми запросами. Всё безопасно, об этом заботится сама СУБД, вообще в норме там к одной СУБД много клиентов одновременно подключается. Для атомарности группы запросов и придуманы транзакции.
>thread1 = Thread(target=self.db_jobs_update())
Я почти не умею в питоновскую асинхронность с его граблями из-за GIL. Но что у тебя здесь? Что возвращает self.do_jobs_update() -- это фабрика, что возвращает метод?
Выглядит так, как будто ты сначала считаешь результат, а потом вызывает Thread с результатом. Смущает то, что target должен по определению быть callable, ты должен был бы исключения словить.
Вот я долбоеб. Действительно, если указать таргет просто как название функции без скобок, то работает замечательно.
Братишка, спасибо тебе!
>Закрыли нихуя не объяснив, последним ответом сказав, что мб реализуют когда-нибудь.
шизиков и дебилов полно. вливайся в опенсорс!
Джанга/фласк/торнадо
Метапрограммирование
Асинхронность/многопоточность
Что добавить?
Добавь жабу например.
Никому твой питон не всрался, если ты не датасаентист или околотого.
Питухон это для студентов и школьников и по быстрому скрипты накидать. Деньги за это не платят.
В вебе со своей тормознутой джангой питухон на самом деле тоже не нужен. Твердо и четко, не нужен.
>Добавь жабу например.
Тем более не нужна. Уже даже давно официально прекратили поддержку Java-applet, и разработчики жабы, и браузеры.
какие сука аплеты)))) Ты из 2005 пишешь? явахуе, лучше сиди тихо за умного сойдешь
Торнадо выкинь, уже 2020 как никак, если, конечно, ты не хочешь работать с легаси. Обрати внимание на sanic и aiohttp
Фласк тоже можно выкинуть, очень малый процент компаний используют его в проде, потому что ни батареек джанговских ни производительности
Многопоточность в питоне тоже не в ходу, но знать как всё работает нужно.
Добавь Docker, PostgreSQL, Redis, Celery с RabbitMQ (или другой очередью, но эта самая популярная)
Спасибо, анон!
А так задание просто найти текст в теге с определенным классом, который точно один такой на странице и в тексте только слова разделенные одним или несколькими пробелами.
А, ну ещё проверять надо если тег или класс не найден, вот так добавил.
re.findall(r'\S+', text) тогда, хотя это не принципиально.
Но что-то слишком простая задачка. Суп точно можно использовать?
Да, вообще всё что угодно можно, любой язык итд.
Я просто увидел на hh вакансию "стажер бекэнд-разработчик" неоплачиваемое, без трудоустройства, прост так. Ну откликнулся, написал эйчару в телегу (там было написано написать ей), она мне кинула ссылку на канал, сказала ознакомтесь пока, чем мы занимаемся. А там организация какая-то обучает типа дизайнеров, копирайтеров итд и ни слова про какую-либо разработку вообще. Она мне не пишет, вакансию удалили, ну я и забил.
И сегодня она мне написала, типа ну что, вы почитали? Я говорю, что что-то там ничего похожего на эту вакансию нет, и она мне отвечает, что вот мы хотим запилить "application tracking system", чтобы как-то там автоматизированно принимать резюме от этих дизайнеров и копирайтеров, ещё и через телегу. Я говорю, что это всё круто конечно, но что в этом стажер будет делать? И она отвечает: "мы ожидаем, что он решит эту задачу", лел. Я сказал, что я врядли такое сам запилю вам и она мне вот это задание выслала, сказала глянуть и завтра сказать, как я буду браться или нет.
Но да, чет сомневаюсь, что их задача хоть близко к этому тесту стоит. Хотя я ничего и не теряюи не получаю.
Такое дело: мне надо бы перенести питон и часть либ на комп, в котором в принципе нет доступа к интернету (pip не сработает). Как мне это лучше сделать?
Там где есть инет пишешь pip download, полученные файлы переносишь куда нужно,а там уже pip install :имя файла:
Братик это развод
Это не коммерческий опыт. Какой же он коммерческий, если ты ничего не зарабатываешь? И проект не коммерческий, ты не работаешь в индустрии, не взаимодействуешь с теми, кто умеет работать, не учишься у них.
Тебя просто запрягают на какую-то небольшую задачку забесплатно. Такой же пет-проект.
Всё-таки за такое хоть чего-то должны платить. Ну если тебе, конечно, просто не интересно что-то сделать чисто для тренировки и без отдачи. Так и формируют мировоззрение у прослойки, что зачем платить, всегда можно найти кого-нибудь, кто за бесплатно ради опыта сделает.
В принципе достаточно, чтобы на другом компе был установлен питон той же версии, на него скопировать целиком папку с virtualenvs.
Более правильный пусть, это сохранить нужные пакеты в виде файлов
pip download package1 package2
их перенести и там через pip поставить
Разберись с virtualenv, если ещё не разобрался, для твоих задач очень нужно.
ЖЫР: форк Python 2 с новым синтаксисом и бэкпортом фич из Python 3
https://github.com/naftaliharris/tauthon
Сильно хуже получилось при условии что я даже про функцию max ещё не знаю? (Сам решение с канала понял не до конца)
Сама задача:
Наибольшее произведение четырех последовательных цифр в нижеприведенном 1000-значном числе равно 9 × 9 × 8 × 9 = 5832
В целом то же самое, просто чуть другие конструкции.
Оба решения так себе.
То решение, что с max, как минимум ужасно глобальными переменными. Создают две функции, и при этом используют глобальные переменные, это зашквар. При этом перегружено.
То решение, что без max, не на питоне написано. Эти while в связке с i += 1, это не питон, вот это надо чистить. Но мне оно больше нравится из этих двух.
В данном контексте ничуть не лучше. Это очень и очень дурной стиль делать функцию зависимой от глобальных констант. И очень дурной стиль выносить то, что по сути переменные, в глобальные константы.
Как, например, будет выглядеть код, если ты хочешь протестировать набор строк, а не одну? Будешь перезаписывать константы?
> Эти while в связке с i += 1, это не питон, вот это надо чистить.
Всмысле не питон? А что это? Когда-то давно только чистый С учил.
Как лучше решить эту задачу на питоне?
не питон в том смысле, что тут так не принято, предпочитают делать не i+=1 а использовать интерфейс итераторов
твое решение (слева) норм
Я в книге укус питона увидел что так все делают (+= -= и другие).
Алсо проясните вот что. Я после того как вычислил длину строки string пытался сделать всю строку как int(string). Но на моменте temp = temp * string питон слал меня нахуй.
Почему из числового набора нельзя взять конкретную цифру? Ведь каждая цифра по идее отдельный символ, не?
Ты пишешь в стиле Си на питоне. В данном случае надо явно использовать range
Как вариант. Не знаю, можно ли сделать более читаемым условие в range, вместо этого len - n + 1
Вопрос, как реагировать, если на входе строка короче 4
В строке ты имеешь доступ к отдельным символам
string
но ты должен помнить, что отдельный символ - это тоже строка, а не отдельный тип char как в Си и не число.
Где-то намудрил с преобразованием типов или не преобразовал типы.
я думаю если ставить цель охуеть по итераторам и пайтон магии то можно вот так:
https://pastebin.com/garavsik
Что значит явно использовать range?
У тебя ошибка, i:i+4 не будет работать, надо i:i+n. По идее строка и число может быть любое, я забыл сделать проверку что n > string.
Почему из числа a = 12345 я не могу взять a?
О чём вы?
Код, который приведён на канале, говно. Авторы сами не умеют программировать, Си-анон лучше пишет. Не нужно на этом канале учиться, надо другое место найти.
Я бы посоветовал Си-анону книжку Intermediate Python, в шапке в хранилище она есть, на русском языке, меньше 100 страниц. Там как раз про конструкции питона специфичные, которых нет в других языках.
>Код, который приведён на канале, говно. Авторы сами не умеют программировать, Си-анон лучше пишет. Не нужно на этом канале учиться, надо другое место найти.
все так Анон
чувак с дженкинсом просто тролит
>Что значит явно использовать range?
В смысле что в этом случае скорее всего надо использовать range. Или какой-нибудь другой специфичный итератор, наверняка в itertools что-нибудь есть для этого, но заведомо не while в том виде, как у тебя.
Читаемость ухудшается и логика кода страдает, дополнительные строки кода, которые требует внимания.
Ну тебя тут сначала i=0, потом сам while, потом отдельно i+=1
Фактически ты имитируешь сишный for(i=0; i<xxx; x++), в сях тоже было бы неправильно такой while вместо for делать. Три строчки кода вместо стандартной одной.
Просто это дурной стиль, так работает, но, реально ты имитируешь итератор стандартный. while нужен тогда, когда у тебя i увеличивается уже как-то более хитро в теле цикла, когда стандартными средствами ты не можешь обойтись.
ясно. выглядит охуенно, как раз то чего мне не хватало. спасибо, анон!
чем удобно читать .epub на виндовом десктопе? calibre - какая-то крайне странная программа
> Не нужно на этом канале учиться, надо другое место найти.
Я чёт вспомнил как на яндексе учился практикум или что-то типа того на петон разработчика, и я написал код в меньше строк, чем правильный ответ в задании. В итоге начал искать группу ВКантакте про петон, взял рандомного чувака и спросил, что за хуйня происходит, он сказал что в яндексе сидят имбецилы.
Что происходит?
в питон так и не вкатился
Понятно. А итератор - я так полагаю, это функции, которые с каким-то шагом выполняют действия? Ну тут мои полномочия все, пойду дальше книгу читать, походу я до стандартных функций питона ещё не дошел.
Ты каложуй, вот что происходит.
>джангу с vue.js
Смотря что тебе надо - если маленький кусок, можешь просто скриптом подключить и сделать что надо. Если полноценный проект с СПА - собираешь нодой проект на Вью, указываешь путь на index.html и раздаешь сам фронт как статику. Сам вью общается с беком через запросы к нужным url'ам бека. там чуть сложнее, но это в кратце
>вообще нахуя мне это нужно?
Более красивый и разнообразный фронт, чем на стандартных темплейтах; универсальный бек- можешь написать любой другой фронт
а производительность можно с такого подхода увеличить? Если джанга не всю херню будет делать, а только бек? Где можно почитать ,как сделать этот полноценный проект с спа? и что такое это спа ?
можно.
Вот объясните нубу, как правильно выбрать архитектуру для своего проекта? Допустим, я хочу сделать что-то типа MUD с помощью бота в телеге. Нужно ли мне для этого писать сервер, api? Или достаточно простозахардкодить функции в боте?
Подскажите какую функцию юзать, заебался тупить.
Дана ебанина из символов: c512a26bb447cfe571af077d45c8adf40ef6abd945b4b1184479339dd9d23aa3a50050a13983f84bd9f3a5786662ffd93b285e047e3fc53cbf50cfa29d2638bd
Надо получить разбитие по 8 символов, чтоб выводилось в столбец:
c512a26b
b447cfe5
71af077d
45c8adf4
0ef6abd9
45b4b118
4479339d
d9d23aa3
a50050a1
3983f84b
d9f3a578
6662ffd9
3b285e04
7e3fc53c
bf50cfa2
9d2638bd
Как эту ебанину сделать, у меня мозг с жтими циклами атрофировался.
Чекни stduviewer, в универе всю литературу в нем открывал.
Делай срез на 8 символов, добавляй его в новый список и удаляй эту часть из строки а цикле.
sosi = 'c512a26bb447cfe571af077d45c8adf40ef6abd945b4b1184479339dd9d23aa3a50050a13983f84bd9f3a5786662ffd93b285e047e3fc53cbf50cfa29d2638bd'
for i in range(0, len(sosi), 8):
print(sosi[i:i+8])
>>63770
SPA - single page application, читай в гайдах и прочих уроках. С СПА - это было как пример, можешь написать используя любой другой подход.
>single page application
объясни, а для чего нужен Django REST framework? Вот делаю я допустим борду, типа двача и чем, он будет полезен? прост пишу проектик свой, не борду и думаю какой стек максимально круто юбзать, чтобы потом и показать было не стыдно. Пока что сделал модели для бд, другие штрихи навел
> для чего нужен Django REST framework
Чтобы сделать РЕСТ без всякой лишней ебанины
кэп
>чем, он будет полезен
Тем, что ты разделяешь свой сайт на 2 сущности. Захочешь фронт поменять - меняешь только фронт, захочешь мобильное приложение - пилишь только фронт.
Именно DRF дает тебя дохуилион различных возможностей, чтобы ты не писал свой костыль для каждого пука. Хочешь регистрацию - вот тебе хуйня в 3 строки, хочешь быстро выдавать данные - вот тебе сериалайзер, вот вьюшка и т.д.
понял, спасибо, броу! Это апи, через которое все мои штуки буду работать.
Тебе надо просто вывести по 8 символов или где-то их еще хранить?
Очевидно потому что могу
Там та же нотация, что в слайсах.
3-ий аргумент - шаг в range, а нахуя додумай сам
Спасибо, а то я дебич
Тьотя покажите ваш бэкэнд...
> из зип-архива
Использовать библиотеку для архивации, распаковать в $TEMP (лялекс) или %TEMP% (шиндовс) и импортировать либу оттуда не вариант?
мимо не умею программировать
А ты думаешь библиотеку в зип архиве можно прочесть, не распаковав? Как ты себе это представляешь?
а как ты дом изнасилуешь...
Можно ли не в %TEMP%, а в память процесса распаковать? Я просто хочу один экзешник чтобы в нем все было.
> Можно ли не в %TEMP%, а в память процесса распаковать?
Бля, а я и забыл, что у всех темп на жёстком, а у меня на рамдиске, сорян.
> Я просто хочу один экзешник чтобы в нем все было.
У вас там такая хорошая документация в петоне https://docs.python.org/3/library/zipfile.html#zipfile.ZipFile.read мне очень нравится. Вот эта штука распаковывает в оперативу.
Илм просто pip install auto-py-to-exe эта программа умеет компилировать (компилировать ли, учитывая что это питон?) весь твой код в один exe и я так пынемаю библиотеки там будут, но тебе лучше самому потестить.
А как сделать, чтобы уже Py_Initialize() брал эти файлы из оперативы, а не с твоего рам-диска?
Глубоко залезать смысла нет, но чтобы была возможность строить годную обвязку вокруг restful бэка? в жс-треде какие-то дегроды сидят и ничего толкового не советуют
читай книгу чувака из джаваскрипт ру, а потом офф доку любого фрейма. тот тред js мертв, там одни собаки гнилые. А тут интеллектуалы, которые всегда помогут советом/ответом
на геймдев мало вакансий и питон там не нужен
ебать, если такие "тестовые" дают вкатышам, то нахуя я сижу и дрочу всякие постгресы с редисами...
пойду тоже украду сделаю классное резюме и начну спамить всем подряд!
>пойду тоже
Иди, сделай тестовое, и тебе дадут возможность реализовать из задачу и получить ценный коммерческий опыт забесплатно
Программа должна считать, сколько раз в строке S встречается подстрока "12". Какой оператор надо вставить вместо многоточия? Вводите ответ без пробелов.
https://ideone.com/SxBeg6
Я понимаю, что там будет p = ..., и это все, что я понял
1. На чём будет проще всего написать: PyGame, PyQt, Tk или вообще EasyGui какой-нибудь?
2. Я вот понимаю, что для игры нужна будет сетка, какой-то двумерный массив или что-то в этом духе. В голове я понимаю как это работает, типа вот каждая клетка в сетке отдельно работает, проверяется на живую/мертвую и тд и тп. Но у меня никак не складывается в голове реализация всего этого. Как это поле показать на экране? Как сделать так, чтобы каждая клетка на этом поле отдельно реагировала? Вот реализацию вообще не могу понять, как ни стараюсь.
>Pyinstaller, не?
Дык он делает так же, как мне анон выше советовал - просто распаковывает все в темпы.
Ситуация хранится и обрабатывается в структуре, потом отрисовывается на канвасе или там на каких-то контролах.
Клики можно ловить и получать координаты.
В общем, запилил виртуальную среду и перенес папку venv с одного пк на другой (оба под виндой). Только вот как мне добавить эту виртуальную среду в PyCharm?.. После меню add new environment он мне кидает какую-то ошибку SDK и заодно утверждает что это Питон 2.7 (хотя он 3.7 ...)
Как подключить эту venv в качестве интерпритатора проекта?
Я не советовал, я просто предположил, что так можно
Ты ебанутый? Ну вот честно, папки он блядь переносит. Виртуальное окружение это не та вещь, где ты можешь просто перенести папку и думать что все будет окей. По твоему когда ты устанавливаешь пакет он просто разархивируется? Нет. Он конкретно под твою систему устанавливается, пишет всякие константы, которые зависят конкретно от твоей машины. Я тебе более того скажу, если ты venv передвинешь из одной папки в другую он сломается. Так что давай, кабанчиком скачиваешь все пакеты и локально их устанавливаешь и сюда больше не пишешь свои тупые вопросы.
Ебать ты, я прям представил себе линуксоида который добавляет файлы в /usr/bin чем-то кроме пакетного менеджера
Vscode автоматом новые env подхватывает, хы
>Я тебе более того скажу, если ты venv передвинешь из одной папки в другую он сломается.
Открой для себя опции --relocable и, для некоторых других случаев, --alwayas-copy.
--always-copy недостаточно для полной переносимости, хоть там в окружение очень много чего копируется, но если та же версия питона в системе установлена, но переноситься должно.
Это неправильный путь, конечно.
как это дерьмо задумано?
Вот дока : https://github.com/Codewars/codewars.com/wiki/Codewars-Python-Test-Framework-V2
захожу на страничку и вижу шаблон задания :
def create_phone_number(n):
#your code here
внизу есть шаблон тестов:
Test.describe("Basic tests")
Test.assert_equals(create_phone_number([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]), "(123) 456-7890")
Test.assert_equals(create_phone_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]), "(111) 111-1111")
Test.assert_equals(create_phone_number([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]), "(123) 456-7890")
Test.assert_equals(create_phone_number([0, 2, 3, 0, 5, 6, 0, 8, 9, 0]), "(023) 056-0890")
Test.assert_equals(create_phone_number([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), "(000) 000-0000")
как локально эти же строки протестировать?
делаю так :
import codewars_test - без ошибок
Ну а как создать объект? или у них тут метод класса ?
или они вообще пидоры и тестируют старым фремворком которому два года?
1920x1080, 0:03
что у них там происходит? не могут новичкам сделать документацию?
Допустим я изменил файл_1 и файл_2.
Как я в комментарии к коммиту могу написать отдельно, что я сделал в файле_1, и отдельно, что я сделал в файле_2?
Или придется их по-отдельности коммитить?
разумеется, единое изменение в разных файла не следует коммитить двумя коммитами в разных файла.
коммит - смысловая единица развития кода.
Сначала создаешь отдельную ветку для изменений первого файла, называешь ветку как рефакторинг_файла_имя_файла, в нее заливаешь изменения этого файла. Так же поступаешь со вторым файлом.
Потом объединяешь ветки, в коммите пишешь причину объединения как общую суть твоих изменений.
В итоге мержишь изменения в мастер.
Я понимаю что по началу может показаться довольно сложным, но лучше сразу привыкать так делать, чтобы на работе не бояться работы с гит.
Pylint стоит?
ты тралишь?
и что потом происходит с этим ебическим набором бесполезных имен веток ? они не мешаются в дальнейшем?
Почему нельзя просто ебануть коммит в dev?
Погуглил - немного удивился, что 100% ответов на похожие вопросы предлагают какие-то несусветные костыли, хотя, казалось бы, задача должна быть распространённой. Может, кто-то работал с чем-то подобным?
Мне не подойдёт, потому что replace() возвращает целиком изменённую строку, а у меня в среднем файлы на 100k символов и в каждом по 80-100 подстрок для замены. Тут нужно как-то напрямую в файле аппендить новую строку по индексу, удаляя старую.
В смысле вот есть mysql-connector-python, а есть pyodbc, и никаких бенчмарков для последнего, никаких преимуществ не написано. Нахуя оно надо?
Тут уже возникает вопрос, как аппендить по этой позиции.
Наверное-таки, придётся делать неэффективный костыль через replace().
2020-02-14 00:00:0025
2020-02-14 01:00:0027
2020-02-14 02:00:0026
Таких значений у меня на несколько месяцев, и мне нужно посчитать среднее количество за час дня по этим данным, т.е. если 02-14 в 00:00:00 было 25, а 02-15 в 00:00:00 было 35, то по итогу за время 00:00:00 мне нужно иметь 30. Как это сделать?
\t откуда-то вылезло, там пробел:
2020-02-14 00:00:00 25
2020-02-14 01:00:00 27
2020-02-14 02:00:00 26
Ну в дне 24 часа, каждому часу соответствует некое количество. В 00:00 часов - 20, в 01:00 час - 25 и т.д.
У меня таких дней несколько, и мне нужно посчитать среднее значение за каждый час суток с учетом всех дней.
using System;
using System.IO;
using System.Linq;
namespace laba1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var data = File.ReadAllLines(@"c:\dev\data.txt").Select(x => x.Split().ToArray()).GroupBy(x => x[0])
.Select(x => Tuple.Create(x.Key, x.Average(y => long.Parse(y[2])))).ToArray();
foreach (var datum in data) {
Console.WriteLine($"{datum.Item1}, {datum.Item2}");
}
}
}
}
Бля, кто здесь тупой, ты или я?
Есть пикрелейтед таблица. Нужно получить среднее от суммы рядов 1, 25, 49, 73, 97 - это будет среднее количество в 00:00 каждого дня.
Нужно получить среднее от суммы рядов 2, 26, 50, 74, 98 - это будет среднее количество в 01:00 каждого дня.
Нужно получить среднее от суммы рядов 3, 27, 51, 75, 99 - это будет среднее количество в 02:00 каждого дня.
Тогда так
using System;
using System.IO;
using System.Linq;
namespace laba1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var data = File.ReadAllLines(@"c:\dev\data.txt").Select(x => x.Split().ToArray()).GroupBy(x => x[1])
.Select(x => Tuple.Create(x.Key, x.Average(y => double.Parse(y[2])))).ToArray();
foreach (var datum in data) {
Console.WriteLine($"{datum.Item1}, {datum.Item2}");
}
}
}
}
Это C#, у меня нет интерпретатора питона под рукой. Но это решение твоей проблемы, бро
Ладно, спасибо, прогоню им.
Спасибо за помощь, но там нет date и time, это одна колонка datetime напрямую из БД, т.е. идет 2020-04-14 00:00 | 24.
Летом будет год как вкатился в backend разработчики, стек Python/Django/Postgresql, опытные анончики посоветуйте куда дальше двигаться, как быстрее стать мидлом? Пока могу по ТЗ написать сервис (Rest/Soap) или модуль какой-нибудь, есть опыт интеграции с разными сервисами. Куда двигаться дальше?
>и что потом происходит с этим ебическим набором бесполезных имен веток ?
Зачем их хранить? Удаляешь.
это как в других языках dataclass
re.sub()
Ну блин, тут безотносительно Питона как бы. У тебя есть координаты кусков в файле, которые надо заменить на что-то другое. То есть в принципе у тебя задана последовательность кусков из исходного файла оставить-заменить-оставить-заменить-оставить. Просто пробегаешь их в цикле последовательно. То, что оставить, пишешь во второй файл, вместо того, что заменить, пишешь во второй файл то, на что заменить.
Бот телеграма BotFather
ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))
В Код писал соксы и прочее не помогало особо.
TLS 1.2 Как то ещё может быть связана?
>Тут нужно как-то напрямую в файле аппендить новую строку по индексу, удаляя старую.
Невозможно, потому что если ты вставляешь какие-то данные иного размера, чем были, то тебе нужно сдвигать все данные, что записаны после. А это возможно только перезаписью, причём даже с перезаписью много нюансов.
Решение тебе уже предложили, поточно читать и записывать в новый файл. Но, если у тебя файлы ВСЕГО по 100к символов, но проще всё в памяти делать. Блин, это и 20 лет назад было проще, когда у компов было в 1000 раз меньше оперативки, чем сейчас.
Удаленному хосту что-то не понравилось и он закрыл сокет. Может версия протокола не понравилась, тут надо как-то логирование сделать и посмотреть. В реализациях TLS там же вроде настраивается, какие протоколы можно использовать.
Да это тестовое для бесплатного задания за нихуя. Прост я сам не умею себе задачи придумывать, а так хоть мотивация небольшая будет пописать код, будто я рил погромист. Хотя она всё ещё не ответила, мб и его хуево сделал, лел.
Лел, прямо сейчас ответила, мб в треде сдит.
Написали, что вместо result = re.sub(' +', ' ', text).strip().split() можно было бы использовать просто result = text.split() и что я не догадался выводить какое-нибудь уникальное сообщение, когда в теге вообще нет текста. И что писать "Код не валиден" не красиво.
Так что не заслужил бесплатного задания.
Сойдут и боты с самым базовым функционалом.
Алсо, что лучше использовать из виртуального окружения - virtual env или pip env? Последний не понял как настраивать в PyCharm, в консольке вроде настраивается, pip файлы создаёт.
Ты хоть через прокси это делал?
А ниче что есть re.sub ?..
ебать дотнетчик порвался.
обесните,что такого крутого в этом ихнем linq, что некоторые питонисты, пытаются эту поеботу переписать в питоне?
есть как минимум три модуля имитирующих linq.
Но как же intertools.groupby и прочие ?
Заебись плакат/обои получатся. Сделай облако в формате 16:9. А можешь спарсить только /pr?
Сам не программист, но для автоматизации всяких разных процессов изучил питон и писал всякие консольные скрипты на чистой функциональщине. Потом стал добавлять гуй для удобства пользователей: сначала tkinter, потом перебрался на QT из-за необходимости поддержки драг-н-дропа в интерфейс.
Собственно, пока функций было не особо много, то сильно не заморачивался, и использовал один класс, куда сваливал и работу с интерфейсом, и свои функции. Но комбайн разрастается, и стало понятно, что куча функций в одном классе/файле - это не очень удобно.
Парадигма ООП мне еще не до конца понятна, и пока раздумываю, можно ли фигачить какие-то универсальные классы для своих нужд.
Т.е., чисто для примера: при нажатии на кнопку происходят определенные запросы через API, затем идет обработка локальных файлов, потом обмен с sqlite, а потом вывод информации в интерфейс.
Как бы это все более-менее удобно реализовать с минимумом геморроя? Делать отдельные классы для работы с АПИ и БД с набором функций в них? Функции довольно захардкоржены, т.к. не очень получается для работы с разными апи использовать универсальные методы, ибо один сервис требует получение ключа одним способом, другой - другим и т.д.
Или есть смысл описания функций в отдельных файлах с последующим подключением?
Немного сумбурно описал все, но, надеюсь, будет в целом вопрос понятен.
>изучил питон
громкое заявление, на самом деле. Скажем так, поставил и немного разобрался с возможностями.
*фикс
Чем парсил?
Каков объем запарсенного контента?
Сколько заняло времени?
Сталкивался с временным баном по IP из-за превышения числа запросов?
Почитай про MVC и прочие деления логики. Многое уже придумали за тебя.
Для работы с классами тебе нужно представлять какой-то элемент программы, как объект, вот у тебя есть интерфейс, у него могут быть только такие-то поля, свои методы и открытые методы, внутри в интерфейсе тоже что-то может быть, а вся работа программы заключается во взаимодействии между различными классами, каждый из которых предоставляет свой API.
>при нажатии на кнопку происходят определенные запросы через API, затем идет обработка локальных файлов, потом обмен с sqlite, а потом вывод информации в интерфейс
Кнопка может быть экземпляром всех кнопок в интерфейсе, он дает запрос другому классу (можно использовать events для этого), экземпляр класса реагирует, внутри себя шаманит (приватные методы), и отдает что надо
делал запросы через requests к api двача, миллион сто тысяч комментов со всех бордов из 5 миллионов возможных, парсил часа два, tqdm предскаызвал 20 часов. банов небыло хуярил запросы без задержок вообще, но запросы медленно и так шли, примерно 1 запрос за 2,2 сек. а мне надо было 20к запросов отослать.
>>65360
Да пахую вообще, там было сколько то стоп слов но нахуй оно мне надо фильтровать контент для двачеров
>>65327
могу, может быть ночью сделаю если не забью
я не умею вообще не знал
я не умею вообще не знал не думал, по быстрому написал, запустил и пошел пельмешки готовить
Потому что за столько запросов асинхронщиной его бы забанили нахуй
ахаха кек, ладно
Можешь сгруппировать явные синонимы и убрать глаголы? Ничего не понятно об обсуждаемом из этих картинок
освой pandas, там есть парсер дат при загрузке файла, и еще дохуя функций для работы со временем
Шарповский linq это питоновские comprehensions и sqlalchemy
Сурс в студию.
Выглядит просто, стажеру дата саинтисту такое можно дать как тестовое
это же на уровне шкило
Спасибо!
Это копия, сохраненная 13 августа 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.