Это копия, сохраненная 26 июля 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Для кода https://repl.it/languages/python3
Не скидывайте сложные исходники в тред, у двоща ебанутое форматирование
Книги https://yadi.sk/d/tArKKuQu3Kejuq
В предыдущей серии >>1182179 (OP)
Номерацию проебали уже раз 20, ты знаешь, сколько тут питон треды существуют?
Да и зачем нумерация, если треды все равно никуда не сохраняются, только дрочить на нее
..try:
....return 'пики точены'
..finally:
....return 'хуи дрочены'
print(f'Куда же присядет анон? Да это же {atata()}!')
Во-первых синтакс эррор, во-вторых форматирование так не работает.
С разморозкой!
>Во-первых синтакс эррор
Чо?
try - пытайся сделать
finally - сделай в любом случае после блоков \эксепт
>Во-первых синтакс эррор
Какой нахуй синтакс эрор если он вернет "пики точеные" и не дойдет до файнали
>не дойдет до файнали
Вам перезвонят. Ну когда ж вы, чёрт возьми, уже научитесь не писать сюда то, в чём не уверены, имея возможность проверить это за 10 секунд в интерпретаторе?
> форматирование так не работает.
Хах, скоро 3.7 выйдет, а тут еще божественным 3.6 не обмазались.
Но тот анон с пиками обосрался, да
Тот, кому я отвечал, говорил прямо противоположеное же.
Сап, питонач. Вкатываюсь в ООП потихоньку и нихуя не могу въехать в магические методы.
Если с __add__ все более менее понятно, где он назначает первый экземпляр self, второй other и при попытке операции сложения возвращает класс со сложенными значениями. То принцип работы с __truediv__ и дохулиардом других методов у меня не укладывается в голове. Поясните чо да как, с меня как всегда NoneType.
Что тебе не понятно-то, блин? Так же вызывается и два аргумента (делимое и делитель) передаются при операции деления (при заимпорченном division'е из __future__).
>возвращает класс со сложенными значениями.
Что напишешь, то и вернёт.
>и дохулиардом других методов
Ну блядь, возьми да прочитй, когда они вызываются.
(5).__sub__(3) == 2
Решил начать с Python. Читаю учебник https://automatetheboringstuff.com.
Вот, пока в начале, дошел до “Truthy” and “Falsey” Values.
И чет нипанятна, там пример такой:
name = ' '
while not name:
print('Enter your name:')
name = input()
Можете за это вот эту строку пояснить "While not name".
Про операторы while я понимаю, и я бы написал while name=' ' и т.д. А тут непонятно с этим not, и в учебнике нихуя не объясняется.
Погугли логические операции.
Смари
Сейчас нейм что - правильно, целое нихуя. Тут целое нихуя равняется к False.
После ввода любого name оно уже будет чем-то, хоть там твое имя, хоть хуй собачий. Тут хотя-бы что-то равняется к True.
это я понимаю, что int 0, float 0.0, str ' ' - это False.
я строку while not name не понимаю.
А конкретно этот not, он тут какую функцию выполняет и к чему привязан?
https://github.com/mherrmann/fbs-tutorial/blob/master/README.md
Сам по жизни фулл стак жс макака, но хочу научиться писать рест апи на питуне, чисто для общего развития.
Сегодня пол дня читал доки к джанге, поиграл с чистой джангой и оказалось, что нужна не она, а некий рест фреймворк.
Поясните мне, как это должно работать? Вот эта парадигма Model - Serializer - ViewSet.
В модели мы описываем схему документа (собираюсь юзать монго).
Сериалайзер описывает, как документ, полученный из модели, должен превращаться в JSON (и наоборот).
ВьюСет же содержит набор API методов?
Может у кого-то есть репозиторий с таким стеком, чтобы я посмотрел, как он устроен, какая там файловая структура и тд?
https://github.com/devslaw/django_rest_example
Гуглится за минуту. Основной фарш в папке apps.
Говно эта ваша жанга. Говно этот ваш 3д мир. Меня моя вайфу зовёт, некогда мне в такой тухляк вникать.
> я строку while not name не понимаю.
Дословно - ПОКА НЕ name, что можно трактовать как ПОКА НЕ TRUE
Вот когда будет уже TRUE, тогда твой цикл перестанет крутиться.
Как по мне, нужно обязательно вести чейнжлоги, и в особенности, когда пишешь "на один раз" - краткую документацию по коду. В один момент этот текстовый файлик сэкономит тебе туеву хучу времени.
Пока bool(name)== False:
do something
Пока ты этим инпутом нихуя не впишешь в имя = будет продолжаться цикл
not name означает, что если нейм не ссылается на ненулевое значение - оно False
хуй знает как пояснить еще понятнее
кароче я учу классы, все покашо понятно, селфы там хуелфы
Иниты
Но нахуй они нужны ? ну всмысле зощем ? В каких случаях я не смогу использовать нормальные штуки, а только классы
и этот ваш пидор Марк Лутз меня так доебал, невозможно его читать, лучше читайте по оф. докам пайтона
Она у вас на компудахтере даже есть
если человек отправляет телеграм боту какой-то текст, то как этот текст сделать, например, нулевым элементом массива или первым (добавлять еще ничего не надо), чтобы потом одним списком запринтить все его заметки, например. Вот кусочек кода:
notes['tutodin', 'tutdva']...
...if message.text == 'Заметка 1':
bot.send_message(message.chat.id, 'Теперь пришли мне ее')
????? = notes[0]
elif message.text == 'Заметка 2':
bot.send_message(message.chat.id, 'Теперь пришли мне ее')
????? = notes[1]...
print('Заметка 1:' + notes[0], '\nЗаметка 2: ' + notes[1])
помоги двачик
Душу потихоньку.
Как сделать шоткаты для консоли?
У ноды есть npm run scriptname, например, есть какой-либо аналог для жанги?
Тю бля, мне когда-то давно отвечали на то, как принимать хуйню, что пишет клиент, но я все проебал. Попробуй гуглить поперек, пока тебе не ответят.
> лучше подзаебаться с pickle, чем начинать дроч с бд
C базами данных ему всё равно придётся познакомится, да и особо дроча там нет. Подрубил SQLite, на SQL`е накидал пару команд и всё.
А потом уже по желанию через ORM`ку какую всё организует.
Сап. Кто-то в этом итт работал с Kivy? Есть пара вопросов:
- Можно ли сделать окно прозрачным? Это вообще в принципе возможно сделать не только в рамках сабжа? Или может есть какие-либо костыли?
- Есть ли готовый способ сделать возможность перетаскивания окна из любой точки?
Ещё проблема конечно же в безграмотности, ведь в мультимедиа я вообще не ебу что куда. В общем.
Дано:
Две или более ссылки на серию, которые нужно воспроизвести как цельный эпизод с единым таймлайном (из-за тайминга сабов).
Идея:
После долгих раздумий появилась идея на клиентской машине ставить промежуточный сервер, который бы объединял эти два потока в один, просто каким-то хуем ставя их один за другим. Плеер на сайте просто же проигрывает их один за другим, а таймлайн у них заранее установлен.
Реализация:
Вот тут анон мне нужна твоя помощь! Подскажи, насколько идея хуёвая и вообще выполнима ли она? Если да, то просто укажи путь на инструменты, реализации чего-нибудь подобного, хоть что-нибудь, просто скажи как это гуглить!
Тоже идея. Пусть это не будет идеалом реализации, но звучит гораздо проще. Точнее в таком решении гораздо меньше неизвестных. Встаёт лишь вопрос как парсить сабы, а звучит он гораздо определённее чем та хуйня что я выше написал, где в реализации я не шарю от слова нихуя.
Возможно даже нарезать сабы не придётся, нужно разобраться с форматами плейлистов. Начинай с тех что поддерживаются непосредственно в коди.
Ну тут легче спрашивать какие нужны?
Kodi supports PLS, Winamp M3U, Cue Sheets, and Kodi Smart Playlist (XSP) playlists.
Это всё больше похоже на аудиоплейлисты. Вот если честно, я тоже нихера не эксперт по теме, но если будешь скачивать и собирать по частям, бери матрёшку:
https://matroska.org/technical/guides/faq/index.html
>How can i create Matroska files
Тебе нужен именно transmux.
https://mkvtoolnix.download/doc/mkvmerge.html
Стриминг конечно предпочтительнее, меньше возни, но вот не знаю насколько успешно это завяжется в коди, все эти smotri-anime пишут свои плееры чтобы усложнить жизнь тем кто хочет скачать или порезать рекламу. Ну и контент там обычно пережат до безобразия, очень мелкий fps, очень большие искажения, но таки да, всё есть, выбирай и смотри.
Нужно. Чтобы можно было изменять код и не бояться что что-то отломалось.
Да в том то и дело, что скачивать полностью и переделывать это не вариант абсолютно. Для этого есть торренты встроенные для... Ну в общем всё это не важно, да. Жаль конечно, про плейлисты ща гуглил, пытаюсь всё это дело в m3u загнать и посмотреть что получится.
В общем пока ковыряюсь. И на том спасибо
>>188603
Не понял тебя. Ты так или иначе можешь вернуть стабильную версию кода. По крайней мере в пайчарме такая хуйня есть.
Алсо, возьми за привычку сохранять по отдельности сорцы с крупными изменениями.
Назвал там "залупа кентавра 0.3" и в чейнжлоге пишешь "0.3 - добавлено то, убрано другое".
Ну захотелось ему так, какая разница? В любом случае, если выполнится первое условие, то до второго и не дойдёт. К тому же, условия взаимоисключающие, так что даже если бы там был не break, то тоже разницы бы не было.
Лучше конечно элиф, но если в задании автор показывает принцип работы брэйка или еще что, то не зацикливайся, это просто пример
Ты умничка и у тебя все получится!
1280x720, 0:20
Хочу вкатиться в бекенд, прочитал Саммерфильда, Лутца, Бьюли. Я сначала думал, что надо теперь прочитать про Джанго, но я так понимаю, она именно про написание самих скриптов-обработчиков-запросов по стандарту wsgi, cgi, я хз уже, а хотелось бы ещё что-то по разработке в общем: как развернуть apache\nginx да и что из двух стульев выбрать, как туда свой Пистон вставить, какую из сотен бд туда пристроить. Что посоветуйте? Пока кончились питоно-книги читаю SICP, алгоритмы, и тереблю свой пистон на codewars.
Открываешь docs на официальных сайтах, tutorial и устанавливаешь-разворачиваешь, для этого не надо талмуды читать. БД бери постгрес. А вот как раз алгоритмы почитай. Таненбаума ещё можно про сети, про операционные системы.
Плюсую все, кроме бд.
Для начала и SQLite хватит, что б не ебаться с разворачиванием/подключением, а потом, как джангу освоишь, сможешь к БД приглядеться, может тебе монго подойдет, может постгрес.
SQLite это довольно экстремальный вариант, предназначенный для встраивания в приложения, там есть множество неудобств и отклонений от стандарта. Разворачивание пг это apt-get install, systemctl enable postgres, редактирование пары строк в конфиге если вообще нужно, systemctl start postgres. И всё, psql в зубы и пошёл.
Монга так же подключается, например, и интерфейс у неё подружелюбнее, чем скуль.
В монге нет транзакций, каскадных удалений и много чего ещё. Да и зачем вообще монга, когда в пг уже завезли json fields?
Можно, конечно, проверить на '0000', но это как-то некрасиво.
Уже посмотрел другие решения, оказывается есть метод isdigit, а я-то думал, что я гений.
Бамп, что ли.
Есть функция которая не всегда принимает file, как мне ее переписать, либо как заменить file?
По созданию АПИ?
На сайте джанго рест фреймворка есть туториал, как раз тоже его прохожу. После нодовского экспресса пиздец голову ломаю.
Не, именно по получению данных из него, и как он устроен, в целом. Че за токены, че за заголовки, че за json.
Всякие серверные фреймворки даже трогать пока боюсь, совсем зеленый. Хочу пока написать парочку парсеров для себя.
Тогда не подскажу
Храни тебя господь, антоша.
>не надо талмуды читать
А как же "Learning Django with ur mom" и остальные? О чем они?
>БД бери постгрес
А чем она лучше MySQL?
>>188747
Уже развернул MySQL и все сделал.
>>188879
>Идите мат.часть учите и найдете применение
Какому-то анону из прошлых тредов советовали использовать монгу как кэш между приложением и большой БД. Без понятие, что это как и зачем.
>Просто почитай на хабре том же про реализацию АПИ различными сервисами. Ну или зайди на любимый сайт/сервис, и поищи документацию/АПИ и будет тебе живой пример.
Там анон выше скинул книжечку, в которой таки все, что мне нужно - от работы с апи, до сохранения данных в базе данных и т.д. Но за совет спасибо.
Объяснение проблемы просто пиздец, откуда вы такие берётесь?
Ткну в небо и скажу, что тебе нужны дефольные аргументы — https://docs.python.org/3/tutorial/controlflow.html#default-argument-values
Развернул? Маладэц
Сворачивай
> использовать как кеш
Вполне хорошая идея.
Лучше не задавай здесь глупые вопросы, а возьми загугли, сравнение постгреса и монго, там будет очевидно где юзать постгрес, а где монго.
А, ну да, тоже читал, но хуй знает, как по мне лучший опыт - практика.
Но книгу прочти, хорошо рассказано про парсинг страниц и инструменты.
https://github.com/pypa/pipenv/blob/master/README.rst
Анончик, родименький, расскажи что я делаю не так? Чому вк не принимает мою пиктчу в виде байтов? В то время как в виде объекта io.BufferReader принимает аж бегом.
Или причина в чем-то другом? Помогите!
Да, virtualenv не работал из-за кириллицы в названии, пофиксил.
Аж интересно, о какой матчасти идёт речь. docs.mongodb.com я знаю почти наизусть.
>>188885
Ну хочешь бери MySQL, пг более цельно сделана и в ней больше фич. MySQL может быть полезной когда у тебя какой-то специфический ворклоад и там ты сможешь выжать дополнительную производительность используя какой-нибудь специфичный storage engine. Для новичка в общем-то большой разницы наверное и нет.
>>188906
Работает через раз.
>Learning Django with ur mom
Вода водяная. Но если это твой первый фреймворк вообще, наверное смысл есть.
Вот ещё какая идея пришла.
Кто-нибудь может подсказать по какому принципу работает YouTube-dl? Ведь он по сути скачивает множество кусочков в один файл. Код читал, разобраться сложновато, но думаю что вполне возможно.
В общем идея такова, что может существует такая же возможность как в youtube-dl просто скачать несколько видеофайлов в один? Типа делаешь какой-нибудь with open(video.mp4): write url_video1.mp4, url_video2.mp4, url_video3.mp4...
просто в мультимедиа форматах я полный ноль и не знаю, вдруг там какие-либо маркеры начала и конца стоят которые нужно ‘обрезать’, также не знаю где и по каким правилам хранится метадата. В общем я был бы очень рад если бы ты анон подсказал мне здесь и направил на путь истинный. А пока я писал подумал почему бы просто не попробовать. Пойду пока и попробую.
На ютубе не нужно сшивание:
https://github.com/nficano/pytube/blob/master/pytube/streams.py#L220
https://github.com/nficano/pytube/blob/master/pytube/request.py
Там они только переходят на раздельные аудио/видео файлы, но опять же, тайминг у них полный, без сегментирования.
Ещё учти, даже если ты напишешь стрим-сервер, могут быть проблемы например с перемоткой.
>Ведь он по сути скачивает множество кусочков в один файл.
Зависит от формата. Стримы ютуба в.ts, например, можно просто склеить. Не-стримы в mpeg-dash, вроде как, тоже, но обязательно нужен первый фрагмент. На какие-то другие фрагрментированные форматы вызывается ffmpeg для конвертации.
Но кажется мне, что тебя не одно из этого, а просто несколько отдельных видео файлов, тогда ffmpeg в помощь.
https://stackoverflow.com/questions/7333232/concatenate-two-mp4-files-using-ffmpeg
>просто скачать несколько видеофайлов в один?
Просто скачать легко:
>with open('video.mp4', 'wb') as f:
> f.write(urrlib.request.urlopen(url1).read())
> #<...>
> f.write(urrlib.request.urlopen(urlN).read())
Но велика вероятность, что это не сработает если медиа файлы самодостаточны, со своими хедерами и метаданными.
Так что, неси прямые ссылки на видео, тогда и сможем помочь. Не зная формата тут ничего, кроме ffmpeg'а, не посоветовать.
Получается, что он просто "ложит" эти chunks рядом в один файл. И у меня была надежда что "а вдруг" это и с обычным mp4 сработает ещё не проверил, сейчас буду.
>>188967
Они скорее всего будут. Ну, дело сейчас даже не в сервере, а в самой реализации, хз с какой стороны подступиться. Знаний не хватает. Думаю доки стоит по формату почитать, может чего яснее станет.
>>188976
Формат mp4. Ссылки например на мадоку, кину качеств похуже если вдруг кто-то тоже захочет поэкспериментировать
https://pastebin.com/H40tu43h
Просто "положить" файлы вместе не получилось. Скачался и записался один файл. Мб в коде можно что-то придумать, пока поковыряю эту идею, вдруг заработает "всё просто" и с хидерами, и метаданными (вряд ли, но почему бы и не попробовать).
Думаю после этого доки на формат почитать, и пытаться выпиливать из файлов метаданные перед записью. mp4 это ведь как раз формат для даша.
Лол, конечно один, переменную не переименовал...
Блин фигню написал, опозорился в скриншоте. Думаю их нужно просто конкатенировать, после функции read это же просто строки получаются. Не знаю правда, что из этого получится.
Да, способ "просто положить их рядом" не сработал. Проигрывается только первый файл.
Покажи как это правильно сделать, плес.
Разумеется, плеер-то читает метаданные этого первого файла, а что там после него находится уже и плевать. Я об этом и говорил.
>>188992
>после функции read это же просто строки получаются.
Не строки, а байты.
>>188988
В общем, как я и говорил, просто отдельные короткие ролики.
Я вижу тут несколько способов:
1. Лёгкий. Потерять возможность стриминга, скачать все части, ffmpeg'ом их объединяешь без перекодирования и отдаёшь сервером уже полное. Долго ждать.
https://trac.ffmpeg.org/wiki/Concatenate
2. Сложнее, но "правильнее". Создаёшь m3u8 плейлист, на сервере скачиваешь и конвертируешь отдельные части в mpeg ts, подправляешь start offset у всех, чтобы плеер нормально загружал одну часть за другой. Так как всё скачивать сразу не надо, #EXT-X-ENDLIST в плейлисте не держишь, и с каждой новой скачанной и сконвертированной частью обновляешь плейлист (так что, с кешами осторожнее). В итоге и таймлайн норм, и стриминг есть.
3. Хардкор. Не уверен, что сработает, но ты можешь попробовать: в первой части подправить данные длительности в mvhd и каждом tkhd на полную серию, во всех частях поудалять эти хедеры, соединив данные треков, ну а клиенту высылать данные на один запрос из нескольких источников по порядку. Что там ещё в контейнере нужно будет поменять я без понятия, придётся тебе много всего почитать в интернете и сидеть разбираться. По сути, это будет что-то типа ffmpeg'шного concat'а из пункта 1, но на лету и с возможностью быстрого старта. (Потребуется, правда, параллельно скачивать все серии, чтобы из первые килобайт повыдёргивать длительности треков.)
В общем, развлечение на долгие недели ты себе, считай, нашёл.
Что такое коди я понятия не имею и гуглить лень, если что.
И как фиксить. Посмотрел в sys.path, там пикрил. Это нормально?
непосредственно к контенту и избавляться от всего остального.
Под каждый формат тебе придётся свой скрипт писать. Читать документацию к типу файла и соответственно обрабатывать, либо с помощью сторонних либ. Формально нужно просто перекодировать, тогда лишнее отпадёт. Но на магическую функцию не надейся.
Спасибо анончик за старания. Жаль большинство вариантов не подходит. Если брать конвертирование "на лету", то это очень много ресурсов системных забирает. Сервер я планировал делать на клиентской машине, а учитывая что kodi (это ранее xbmc, мультимедийный центр для просмотра кинца\сериалов) ставится на андроид смартфоны\приставки и просто дряхлые домашние серваки, то этот вариант не подходит совершенно, учитывая что пытаюсь я эту хуйню обойти ради видео в качестве 1080р.
Качать тоже не очень, т.к. для этого есть хорошие дополнения стриминга торрентов (но они не всегда удобны), тогда моя задумка немного теряет в преимуществах.
А вот по хардкору я тоже думал сделать именно так, уже доки на формат нарыл, благо там всего 20 страниц. Да, затея люто геморная, но сейчас помимо этой задачи ещё дел выше крыши, поэтому пока отложу. Там вроде на форуме ответили что эту задачу можно решить в рамках самого этого медиацентра, но звучит прохладно.
Спасибо.
Пытаюсь развернуть свой проект на впске, настраиваю supervisor + gunicorn, когда пытаюсь стартануть supervisor получаю такой трейсбек в логах
File "/home/svalee/quests_backend/../venv/bin/gunicorn", line 7, in <module>
from gunicorn.app.wsgiapp import run
ModuleNotFoundError: No module named 'gunicorn.app'; 'gunicorn' is not a package
сам gunicorn стартует, если с директории проекта написать:
gunicorn system.wsgi
по юрлу два файла с настройками supervisor и gunicorn
dpaste.de/bF7P
В чем может быть проблема?
>то это очень много ресурсов системных забирает
Не забирает. Нужно сменить только контейнер, само видео не кодируется.
>ffmpeg -i part2.mp4 -acodec copy -vcodec copy -muxdelay 0 -muxpreload 0 -output_ts_offset 251.425 part2.ts
Выполняется за доли секунды.
ffmpeg умеет скачивать из интернета, и при этом направлять вывод в stdout.
После того, как я вышеприведённой командой сконвертировал первые четыре части (мгновенно, напоминаю) и сделал вот такой плейлист https://pastebin.com/1eTE6LdT , можно спокойно запускать
>python3 -m http.sever 8000
в директории с этими файлами, идти на https://video-dev.github.io/hls.js/demo/?src=http://127.0.0.1:8000/index1080.m3u8 и радоваться цельному стриму. Ну, главное не забыть указать правильные оффсеты для частей 2-4 (можешь взять для тестов из моего плейлиста, оффсет для части N равен сумме длительностей частей от 1 до N-1).
Ну и остаётся дело за малым:
1. Скачать первые 200байт видео, узнать длительность очередного видео из mvhd
https://www.cimarronsystems.com/wp-content/uploads/2017/04/Elements-of-the-H.264-VideoAAC-Audio-MP4-Movie-v2_0.pdf тут легко и подробно расписано где что находится, struct в помощь.
2. Запустить ffmpeg с нужными параметрами, ловить выход, перенаправлять в запрос от клиента. Ну или скачивать на диск и потом с него читать, если планируется несколько одинаковых запросов на один сервер.
Из минусов, к сожалению, необходимость ожидания полной загрузки куска, по крайней мере в случае с hls.js, а для 4-х минут 1080p это занимает значительно время.
Как вариант, оценить скорость скачивания и примерную длительность (я так думаю, там всё на сайте по ~4 минуты идёт), скачать первые 30 секунд и оборвать ffmpeg, а затем же качать целиком первую часть снова.
Прелесть плейлиста и .ts (а именно вписанного в него оффсета) в том, что я могу иметь такое плейлист — https://pastebin.com/4iMp42zZ в котором первые 30 секунд p0.ts и p1.ts идентичны, однако так как p0.ts маленький, то и видео играть начнёт раньше, и когда придёт время играть 31-ую секунду, он спокойно переключится на p1.ts и продолжит с нужного места.
Собственно, вот всё то, о чём я говорил https://pastebin.com/KSCV7aJ0
Ну, кроме короткой первой части. Способ рабочий, вручную проверил, но в коде этого нет (это ж надо из ffmpeg'а stderr перехватывать с длительность, ну его нахуй).
Запускаешь, идёшь на всё ту же демку hls.js и направляешь на локальный плейлист и радуешься. По желанию можешь раскомменитить или заменить ссылки (которые в коде на 360, если что).
В общем, доводить вещи до конца не моя специальность, свою долю интереса я вынес, дальше уже сам.
>>189346
>>189387
Большое спасибо за инфу. У меня настроение уже заебало прыгать от надежд и разочарований с этой темой. Сегодня, спустя неделю после запроса, прислали наконец api к сайту, которое для решения задачи нихуя не поможет.
В общем пердолиться по-новой начну уже завтра, сегодня надо передохнуть. Спасибо анон за труды! Сотни нефти!
Бамп.
Можешь попробовать вместо удаления из одного массива просто создать новый, и переносить туда непротивоположные инструкции в else'е.
У меня такое решение там висит с давних времён, только с "лишней" рекурсией спойлер: в отличие от красиво сделанного бест практисес. Всё ок работало, но может ужесточали требования, не знаю.
При удалении i-ого элемента питону нужно в памяти подвинуть все следующие (n-i) элементов. Соответственно, удалять первый элемент из миллионного списка довольно затратно. Добавлять же новый в конец (или удалять из конца), не считая моменты перевыделения памяти, очень дёшево.
Guten Morgen, Genossen! Heil unser'm Führer Van Rossum! Python Heil!
если нет ограничений по памяти, то я бы разбирал последовательность через стек (если попался "противоположный" элемент, то делаем pop и переходим к следующему, иначе push), содержимое которого вернул бы в виде массива.
спасаю твою жопу. забей хуй на джангу и бери айоху, забей хуй на рест и бери джейсон-рпц. в добрый путь
ах ты вонючка ебаная, чтоб у тебя мать сдохла в муках! тьфу блять
Что с жангой не так?
Это декриптор для DES пароля с известным ключом
https://pastebin.com/QHKHhFpN
При запуске ошибка:
$ python dec.py
Traceback (most recent call last):
File "dec.py", line 61, in <module>
f_in = open(sys.argv[1],'r')
IndexError: list index out of range
Бля, ну поставь нолик вместо единички, и зачем вообще так по ебанутому открывать файл?
>Бля, ну поставь нолик вместо единички
Поставил, но чет хуйня
python2 dec.py
[] Huawei Password Decryptor
[]-----------------------
[+] User: ('local-user'
[+] Password type: in
[+] Password: line)
>так по ебанутому открывать файл?
Могу еще так
Ты пытаешься добарться до первого аргумента, но при этом не передаёшь ни одного.
>py3 dec.py 1 a mamasha
>sys.argv[1] == "1"
>sys.argv[2] == "a"
>sys.argv[3] == "mamasha"
Ты же просто py3 dec.py вызываешь. Какой ты надеешься файл откроется-то в твоём коде?!
>При удалении i-ого элемента питону нужно в памяти подвинуть все следующие (n-i) элементов. Соответственно, удалять первый элемент из миллионного списка довольно затратно.
Ха, а я думал, что удаление элемента из списка работает так же, как удаление файла на пк: снимаем галочку с 'занято' и никогда больше не видим этот элемент. А оно вот так оказывается. Тогда ясно, почему таймаут был. Спасибо.
Не знаю, где ты там смог рекурсию воткнуть, кстати. Я сразу сделал как бест практис, только с try except IndexError вместо if список. Мне кажется поймать IndexError когда он выстрелит из-за пустого списка легче, чем проверять, а не пустой ли список, на каждой итерации.
>>189503
Во, вообще классная идея, так и сделал. хотел сначала добавлять по элементу, при этом смотря на следующий, и проверяя, а не противоположны ли они. со стеком намного меньше проблем
640x360, 0:21
def string_to_date(string):
"""
Перевод строки формата "ГГГГММДД" в объект datetime
"""
return datetime.datetime(year=int(string[0:4]),
month=int(string[4:6]),
day=int(string[6:8]))
>>>string_to_date('20180514')
ValueError: invalid literal for int() with base 10: '5-'
У меня эта дата идет в другие функции. Косяк там
Есть скрипт на python который выполняется через cron раз в 10 минут.
Необходимо вставить условие в скрипт, что бы часть кода выполнялась раз в сутки. Куда копать ? Можно брать unixtime и от него высчитывать но это как то криво, мне кажется.
Это очевидно, но у меня нет доступа к крону на хосте.
спасибо
>Не знаю, где ты там смог рекурсию воткнуть
Ну я проверял пару элементов и если они не противоположны — добавлял первый в новый, "чистый" список и шёл дальше проверять следующую пару входного. Соответственно, если противоположными окажутся элементы 1 и 4, в моём "чистом" они всё равно окажутся, а значит нужно пройтись уже нему, чтобы почистить:
>вход = ['n', 'w', 'e', 's', 'e', 'n']
>выход = ['n', 's', 'e', 'n']
>рекурсия
>вход = ['n', 's', 'e', 'n']
>выход = ['e', 'n']
%%глупенький был тогда, топорно решал.%
Нужно получить из каждого листа в myarr элемент соотвествующий idx, то есть для первого листа нужно получить элемент находящийся по индексу который расположен в myidx на первой позиции, и так далее.
Как?
Ты вопрос не понял. Так мне возвращается лист, а мне нужно
для каждого листа получить элемент по индексу указаному в idx.
myarr[np.arange(0, len(myarr), dtype=int), myidx]
В чем причина такого скачка? Ведь цикл закончился, и, кажется, должно произойти его пимное завершение без очистки списка.
*мирное завершение
А нет никакого скачка. Вон он там сожрал всю память под этот ебунячий список, дальше поработал с ним, вышел, память освободилась.
Ну возможно. В питонах же каждый новый float это новый объект в памяти, вот и идёт постоянная аллокация. Потом запускается сборка мусора, которая тоже что-нибудь себе аллоцирует, вот и скачок. Под такие задачи нужно numpy использовать.
Сраный for. Я сидел и бился в конвульсиях, почему я не могу bin(b'a'), а оказывается bytes объект это сраный контейнер всегда, из которого числа надо доставать. Спасибо.
С этим отлично справлялся gevent и grequests, но как только я запустил свой код там, где он должен работать, работать он перестал из-за обезъяних патчей и выхода нет.
Блядь, как!? КАК? Мне просто нужно загрузить несколько сайтов, сука неужели так сложно написать пример как это сделать асинхронно на twisted или tornado пиздеееец!! Нихуя не понимаю, помоги анон.
Питон должен быть 2.7, поэтому либо twisted либо tornado.
Просто напиши или дай ссылку, как мне получить параллельно респонсы с двух сайтов, МОЛЮ!
Ну параллельно, асинхронно. Потому что ссылок 20, если они выполняются синхронно, то это занимает 30 секунд, а если асинхронно то 10
https://docs.python.org/3/library/concurrent.futures.html#threadpoolexecutor-example
Вообще вроде бы скрейпи умеет это всё асинхронно тащить. Там как раз для пауков всякая всячина.
Ну ещё меня тоже удивило что (b'abc').hex() есть, а bin нет. Можно предложить Гвиде это в интерпретатор.
futures вроде для 3 питона. Вот тоже натыкался на scrappy, пиздец. Вот анон, меня прям берёт грусть тоска, вот не знаешь ключевого слова, и хоть какие аналогии пиши в запросах гугла всё равно в ответ он будет говном кормить. Мне часов 4-5 потребовалось, чтобы нарыть, что scrappy умеет в эту хуйню, и то, краем глаза чисто случайно в ответах на стаке увидел. Ну, тащем-та это уже не важно. Буду иметь в виду. Нашёл замену grequests в виде erequests лол. Работает немного дольше, но работает
И вот я туплю че-то, потому что через django rest framework я делал только по моделям сериалайзеры, а как тут поступить?
Нужно какую-то кастомную вьюху пилить, или как?
Я не понял, что это и нахуя оно вообще.
Мне нужен не csv на выходе, а чтобы при обращении к, допустим, /items/[id пользователя] через pandas я находил бы нужную строку и брал оттуда данные. А потом уже возвращал в реакт.
С матрицей часть я всю сделал уже необходимую, я не понимаю, как мне это в рест апиху добавить.
Вроде разбираюсь, а воображения придумать задание - нет.
Не скипайте, с меня как всегда - нихуя
>С матрицей часть я всю сделал уже необходимую
Т.е. вся информация в SQL-базе? Если нет, тогда не сделал.
http://www.codeabbey.com/index/task_list
Если совсем начальный - кодкомбат.
>>189132
Попробуй анаконду накатить, говорят хорошо сделали.
Сам не питонирую на винде, не знаю.
Что написано в настройках? "python.linting.maxNumberOfProblems": 100 . Сколько ошибок он отображает? 1. Одну ебаную ошибку, всегда.
Что написано в туториале? "Linting runs automatically when you save a file, and you can run manually using the Python: Run Linting". Что происходит при ctrl+p Python: Run linting? Нихуя. Вот у меня ошибка ALE BLYA, я эту строку делаю пустой, пишу Run linting, и после небольшой прогрузки, эта хуйня отмечает то же самое, теперь уже пустое место. И перемещается на следующую ошибку только посте ctrl+s, т.е. после сохранения файла. Это я ебанутый, или вскод? Я же все сделал так, как указано в официальной документации:
https://code.visualstudio.com/docs/python/linting
Установил, настроил, не работает.
Вопрос: как заставить это работать? Как сделать так, чтобы линтер показывал сразу все ошибки, а не только 1? Как сделать так, чтобы линтер работал, когда выполняю 'Python: Run linting', а не только на сохранение файла? Почему все так хуево?
Настройки отклеились
Прыщеблядь, сгинь. Если не осилил окна - неча и рот открывать.
мимо сижу на семерке, не обновлялся несколько лет
Это еще зачем?
Там в матрице и так 6 млн записей, она общитывается секунд 10 на моем пека и так, через бд вообще вечность ждать буду.
Неужели никто из анонов не знает? :(
Это снова аноний с удалением/изменением строк в текстовом файле. У меня полторы недели не было интернетов, так что отписываюсь так поздно.
Первым делом хочу поблагодарить советчиков за помощь с подсказками для решения этой проблемы. На данный момент я добился следующего кода для замены строки в текстовом документе вида:
Скушай
еще
этих
французских
булок
from shutil import copy
from os import unlink
copy(textfile.txt, backup.txt)
with open(textfile.txt, 'w') as file1, open(backup.txt, 'r') as file2:
----for line in file2.readlines():
--------file1.write('' if line == 'еще\n' else line)
unlink(backup.txt)
Итог по файлу:
Скушай
этих
французских
булок
Что просто прекрасно. Но после этого я с разбегу впечатался в кирпичную вкладку, когда захотел стереть ДВЕ строки.
Я использовал два способа:
1) Пытался свести две строки в одну:
...
--------file1.write('' if line == 'еще\nэтих\n' else line)
что не помогло: не изменилось ничего.
2) Пытался использовать несколько if'ов одновременно:
...
--------file1.write('' if line == 'еще\n' or line == 'этих\n' else line)
(аналогично, если использовать более громоздкие if'ы для каждой строки отдельно)
что привело к тому, что стирается только последняя указанная строка (то есть если if-statement'ов дохуя, сотрется почему-то только последняя из указанных, хотя по логике все if'ы должны срабатывать одновременно, ибо они не elif'ы).
У меня остается только последнее решение, к которому я не хочу прибегать совершенно, а именно: для удаления каждой строки использовать весь код, начиная с создания бэкапа и заканчивая его удалением, и так повторять до посинения, пока все нужные строки не исчезнут. Но это пиздец, сами понимаете.
Что я упускаю, подскажите, пожалуйста.
Это снова аноний с удалением/изменением строк в текстовом файле. У меня полторы недели не было интернетов, так что отписываюсь так поздно.
Первым делом хочу поблагодарить советчиков за помощь с подсказками для решения этой проблемы. На данный момент я добился следующего кода для замены строки в текстовом документе вида:
Скушай
еще
этих
французских
булок
from shutil import copy
from os import unlink
copy(textfile.txt, backup.txt)
with open(textfile.txt, 'w') as file1, open(backup.txt, 'r') as file2:
----for line in file2.readlines():
--------file1.write('' if line == 'еще\n' else line)
unlink(backup.txt)
Итог по файлу:
Скушай
этих
французских
булок
Что просто прекрасно. Но после этого я с разбегу впечатался в кирпичную вкладку, когда захотел стереть ДВЕ строки.
Я использовал два способа:
1) Пытался свести две строки в одну:
...
--------file1.write('' if line == 'еще\nэтих\n' else line)
что не помогло: не изменилось ничего.
2) Пытался использовать несколько if'ов одновременно:
...
--------file1.write('' if line == 'еще\n' or line == 'этих\n' else line)
(аналогично, если использовать более громоздкие if'ы для каждой строки отдельно)
что привело к тому, что стирается только последняя указанная строка (то есть если if-statement'ов дохуя, сотрется почему-то только последняя из указанных, хотя по логике все if'ы должны срабатывать одновременно, ибо они не elif'ы).
У меня остается только последнее решение, к которому я не хочу прибегать совершенно, а именно: для удаления каждой строки использовать весь код, начиная с создания бэкапа и заканчивая его удалением, и так повторять до посинения, пока все нужные строки не исчезнут. Но это пиздец, сами понимаете.
Что я упускаю, подскажите, пожалуйста.
>Там в матрице и так 6 млн записей, она общитывается секунд 10 на моем пека и так, через бд вообще вечность ждать буду.
Парсить + отправлять в базу будет долго, да. Но зато на выходе селектить будет на много быстрее чем сейчас
Поссал тебе на ебало. Как там, на неподдерживаемом говне сидеть?
> Как там, на неподдерживаемом говне сидеть?
Ыы обновка обновочка ням))
Самому не противно, дурачок? Даже самые основы основ учат, мол, работает - не трогай.
покормил
Он же написал, что ему хуёво. Ничего не работает, ааа, помогите...
Не противно, я-то обновляюсь с умом, когда не предстоит никакой важной работы. А виндобляди в интернете тут и там горят от внезапных и неотменяемых обновлений.
Вообще не знаю, почему ты загорелся от невинного совета попробовать кодить под линуксом, ведь он объективно более удобен для этого.
И ты забываешь, что спермёрка уже даже не ЛТР, новое железо под ней уже заводится с плясками.
Справедливости ради: отладчик в VS - это сказка. GDB и LLDB - флюгагехаймен по сравнению с VS.
Сам сижу на лине и не понимаю, как коллеги юзают винду, но жутко завидую их отладчику, он божественнен. Видать только с таким можно продолжать пилить ось, на которой он работает.
Мне нипанять, не юзаю IDE. Атом наше всё.
> Если не осилил окна
Ну так помоги тому c проблемами тогда, осилятор.
>>190658
>('' if line == 'еще\nэтих\n' else line)
Вполне работает. https://repl.it/repls/AlienatedUnfoldedWorker Однако, это очень коряво такое в write() вставлять, в любом случае.
Лучше сделай проверочную функцию:
>if need_to_write(line):
> file1.write(line)
А внутри уже какие угодно условия делай.
Или, если строку нужно изменить, можно
>file1.write(process_line(line))
А там оно уже вернёт '', неизменённую line или какую другую любую строку.
>line == 'еще\n' or line == 'этих\n'
Вместо этого можно
>line in ['еще\n', 'этих\n']
Намного короче получается.
>for line in file2.readlines():
Совсем не обязательно readlines() делать (который сразу весь файл читаеть и в память загружает). Можно и просто
>for line in file2:
Тогда в каждой итерации будет читатсья по строке. Полезно для крупных файлов.
И последнее
>'еще\n'
А что, если это последняя строка? Там \n может уже не оказаться. Советую игнорировать переносы (hint: str.strip) при обработке.
>-file1.write('' if line == 'еще\nэтих\n' else line)
Потому что line у тебя всегда одна строка, в ней не может быть и ещё, и этих, потому что это две строки. Вроде логично же, не?
> Если не осилил окна
Ну так помоги тому c проблемами тогда, осилятор.
>>190658
>('' if line == 'еще\nэтих\n' else line)
Вполне работает. https://repl.it/repls/AlienatedUnfoldedWorker Однако, это очень коряво такое в write() вставлять, в любом случае.
Лучше сделай проверочную функцию:
>if need_to_write(line):
> file1.write(line)
А внутри уже какие угодно условия делай.
Или, если строку нужно изменить, можно
>file1.write(process_line(line))
А там оно уже вернёт '', неизменённую line или какую другую любую строку.
>line == 'еще\n' or line == 'этих\n'
Вместо этого можно
>line in ['еще\n', 'этих\n']
Намного короче получается.
>for line in file2.readlines():
Совсем не обязательно readlines() делать (который сразу весь файл читаеть и в память загружает). Можно и просто
>for line in file2:
Тогда в каждой итерации будет читатсья по строке. Полезно для крупных файлов.
И последнее
>'еще\n'
А что, если это последняя строка? Там \n может уже не оказаться. Советую игнорировать переносы (hint: str.strip) при обработке.
>-file1.write('' if line == 'еще\nэтих\n' else line)
Потому что line у тебя всегда одна строка, в ней не может быть и ещё, и этих, потому что это две строки. Вроде логично же, не?
> Ну так помоги тому c проблемами тогда, осилятор.
Тоже ебался с подобной проблемой, фиксил добавлением всевозможных путей к питону.
Прочитать и обработать первые строки файла. Что за вопросы, блин? Не читай в память то, чего тебе не нужно, больше ничего тут не ответить.
for lineno, line in enumerate(f):
....if lineno > 3: break
вот какой ответ я ожидал
вот что нужн применять вместо классического счетчика
Кстати таки накатил линукс. Виртуленв работает без костылей, в вскоре модно даже выбрать в качестве интерпритатора, ахуенно.
Как же я блядь обосрался, господи. Не пинайте.
Нашел ответ человек в телеграмме. Если у кого будет та же проблема: https://github.com/PyCQA/pylint/issues/1021
Текстовый файл периодически меняется. Соответственно, переменная должна меняться тоже. Внимание, вопрос: как используя джанго, мне лучше засунуть переменную в память, чтобы при каждом запросе не парсился текстовый файл с диска?
631x420, 4:21
Только меня интересует как написать скрипт который бы получал эвенты изменения файлов в директории.
Или это сложно/не кроссплатформенно? Я на винде сижу.
Засунуть в редис или мемкешд.
Другое дело, нахуя тебе это? Прочитать файл с диска – это не дороже, чем в базу один раз сходить.
> Прочитать файл с диска – это не дороже, чем в базу один раз сходить.
Даже если база на локалхосте?
Да
Потому что ты блять ебанутый, ты вообще понимаешь, что ты делаешь и зачем?
1) Тебя не смущает, что твое слово map ПОДСВЕЧИВАЕТСЯ БЛЯТЬ? Охуенно тебе builtin функции ломать? Никогда так не делай, иначе Гвидо отрежет тебе голову и насрет в горло.
2) У тебя в словаре pos используются операторы доступа к map, вот эти скобочки []. Они подразумевают взятие элемента из контейнера - списка, тупли, вообще из любого объекта, у которого определен метод __getitem__. И внезапно, у None'а этого метода нет, потому что это не список и не тупля.
3) Что бы ты в конструктор не передавал, это запишется в self.map инстанца, а в определении класса вне метода __init__ у тебя будет отдельный map, который всегда равняется None. Есть атрибуты инстанца, которые уникальны для каждого объекта класса, а есть атрибуты класса, которые одинаковы для всех экземпляров класса.
>Вполне работает
Бля, я хз, как это раньше у меня не работало. То же самое повторил: реально пашет.
Я думаю, для меня это самый удачный вариант. За
>>line in ['еще\n', 'этих\n']
отдельное спасибо. Так действительно красивее.
Хотя я тут глянул, как я исходно делал, возникает проблема (см. пик). После выполнения стирается только последняя указанная строка. Вот о чем я говорил.
Алсо строка выше работает, только если требуется заменить строки под одну копирку (в данном случае если все строки надо удалить). То есть если мне захочется превратить слово "французских" в "немецких", мне по новой всю часть кода с создания бэкапа повторять? Потому что если попробовать еще раз через file1.write, то он мне по мне строчки будет в файл записывать.
Это бы решалось во втором варианте с кучей if'ов, но строка меняется только последняя, как я и говорил.
>1) Тебя не смущает, что твое слово map ПОДСВЕЧИВАЕТСЯ БЛЯТЬ?
он подсвечивается только в ебанутом текстовом редакторе, в пичарме такого нет.
>2,3
Походу понял свою ошибку. Словарь pos инициализируется при создании обьекта и принимает значения для того мап, который None ну или [[1,2],[1,2],[1,2]]
с моим неработающим костылем, да? Тогда для этого словаря надо сделать что то типа геттера?
>в пичарме такого нет.
Специально запустил свой Пичарм, чтобы пописать тебе на лицо.
> Словарь pos инициализируется при создании обьекта
Словарь pos инициализируется, когда выполняется определение класса.
>Тогда для этого словаря надо сделать что то типа геттера?
Оверкилл, мне кажется. можно сделать значениями словаря lambda self: self.map[self.X][self.Y+1], и потом передавать им self инстанцов класса.
пидор \(._.(/
>1) Тебя не смущает, что твое слово map ПОДСВЕЧИВАЕТСЯ БЛЯТЬ? Охуенно тебе builtin функции ломать? Никогда так не делай, иначе Гвидо отрежет тебе голову и насрет в горло.
Ага, только использование имени builtin-функции качестве имени аттрибута (ну и в параметрах конструктора) я регулярно встречал в доках и исходниках крупных библиотек.
И PEP8 это не запрещает.
мимикрокодил
>я регулярно встречал в доках и исходниках крупных библиотек.
Я тоже. Но это все равно хуйня полная, зачем так вообще делать?
просто я однажды скинула так же, а на меня весь тред кинулся, так что приходиться скрываться.
Так объяснишь в чем я обосралась?
Еще и сокеты трогает руками, а не хелоуворолды
560x420, 4:52
А почему бы и не сделать? Уродство вроде id_, max_, len_ - лучше?
В случае имени аттрибута - это вообще никак не влияет на builtin'ы.
В случае параметра __init__ - в его скоупе использование какого-нибудь id или map маловероятно, а если и вдруг понадобиться - ты никак не сможешь не заметить обосрамс в таком крошечном скоупе и так и быть переименуешь в id_.
Но аутистов очень смущает то что map синтаксически выделяется другим цветом по себе знаю.
И кстати это проблема VSCode хоть я и сам на нём сижу по многим причинам - подсветка синтаксиса в нём строится только на тупых регулярках и никак не сможет например различить где действительно идентификатор builtin'а и где локальная переменная.
Но пример проблемы Питона не особо страшный. А вот в сишке невозможность различать функции и макросы - это пиздец.
Всякие йоба-IDE в такую посветку обычно могут, "легковесные" - нет.
Гавно, т.е. мне всегда придётся оборачивать строки в мой класс. Не катит.
Каждый день вижу голландских пидорков, сразу по харе определяю где пидорок, а где ещё сомневается.
Шлюха
>(см. пик)
Ну так ты на свои if'ы ещё раз взгляни. Ты не в курсе elif'ов?
Твой код работает так:
1. Если "ещё" - пустую строку
2. Если "этих" - пустую строку, иначе line.
Так вот, "ещё" != "этих", а значит при прочтении этой строки твой код попадает в блок else'а. Тебе нужно было if, elif, else делать.
>мне по новой всю часть кода с создания бэкапа повторять?
Нет. Я ж для чего и сказал, что нужно сделать отдельную функцию для обработки строки, которую будет возвращать то, что нужно записать в файл. Таким образом у тебя будут отделены блоки чтения-записи и обработки.
>>191345
В питоне нет перегрузки. Но ты хотел сказать переопределить, конечно. манки-патчинг тут зашёл бы: ClassName.__eq__ = your_eq_function, но у builtin'ов их изменять нельзя, к сожалению (или к счастью). Так что, да, только оборачивать в свой класс. Но ты лучше задачу опиши, может ты хуйню какую творишь и лучше бы тебе просто функцию нормальную написать, а не гнаться за типа коротким str1 == str2 вместо compare(str1, str2).
>у builtin'ов их изменять нельзя, к сожалению (или к счастью)
JS'овцы, кстати, на этом уже попались разок и частично подгорают, шумиху какую-то подняли, потому что какая недобиблиотека переопределила что-то в стандартных прототипах, а теперь это имя хотят для другого использовать. Чем закончилось всё не знаю, буду раз, если по хардкору пояснят.
>по поводу переопределения.
Хотел переопределить операцию сравнения для строк, чтобы попробовать небать тесты.
Мой лучший результат 4-попугая, в то время как самый лучший 1.
Вот я и подумал, может кто-то сломал тесты.
Кстати, задача простая:
Есть список objects, надо подсчитать кол-во уникальных объектов в нем.
Например:
len(set(map(id, objects)))
Попугаев дают за эффективность и краткость кода.
Как можно эффективно и красиво пробежаться по списку?
А зачем тебе тут map? объекты хешируемы? Если да, то сразу set на список и вызывай. Алсо, где тут вообще у тебя строки-то? id так-то число возвращает (адрес в памяти, если CPython).
Проблема в том, что у 1 и True один хеш из-за преобразования.
А надо либо is либо id сравнивать.
А, ну тут проблема, да. А дай ссылку, что ли, поиграться там. Так-то кроме id эти два ничем друг от друга и не отличить, вроде, поэтому даже явное прохождение в лупе со счётчиком и словарём для "встречавшихся" элементов ничего не изменит. Разве что за один проход, а не два.
Схуя ли? Пип платная хуйня? Да ну нахууууууй.
ситуация: есть одна sqlite3 бд, в ней 130+ таблиц. В эти таблицы постоянно пишется дата, которая парсится с некого api. В тоже время, из этой базы берется эта же дата на обработку. То есть постоянный insert'ы и select'y.
Как бы ускорить это дело? все, конечно, на python
PostgreSQL + aiopg/asyncpg = profit
Если insert`ов больше подумай о хранении в кэше каком, обработка и лишь затем запись обработанного.
у скюлайта есть куча настроек, гугли, отключи например журналирование или засунь все в память
Ещё один идиот выбрал SQLite не понимая для чего этот самый скулайт создавался. ЗАТО РАЗВОРАЧИВАТЬ НЕ НАДО. Ебись теперь, земля тебе пухом.
Спасибо большое тебе.
Я не совсем понял про твои функции, но обошлось и без этого. If'ов - elif'ов достаточно. Все теперь работает как часы.
Ты очень милый анончик.
Хех, ну я вижу уже в описаниях на сайте они там совсем упоролись и рекомендуют пихать скулайт везде кроме бигдаты. Вообще он создавался для встраивания в приложения, в классические десктопные такие, где точно никаких больших нагрузок нет, никакого конкурентного доступа.
Ну вон, как видишь тот анон хочет уже ускорить. Осознание поздно, но приходит.
Хм, собственно, ничем это и не отличается от моей реализации кроме того, что оно без определения функции и встроено прямо по ходу кода.
>if line:
> line = line + "\n"
Интересное решение. Теперь понятно, почему функция FileInput() автоматически проставляет красные строки после своего завершения. Что-то подобное встроено в нее изначально. Возможно, тогда стоит сразу ее и использовать, чтобы не копировать оригинальный файл отдельной строкой (там встроенный backup есть).
>stepik .org/lesson/24458/step/9
Your code complexity score is 6.08 (best for this step is 1.0).
Почти закончил курс, большинство задач с best for this step is 1.0, когда я решаю за 3-8 секунд.
Или я макака совсем, или в чем там дело?
Watchdog
Ясненько, я раньше ее юзал при разработке, до релиза, а затем перекатывался на постгрес.
Сейчас даже таким не занимаюсь.
Пустая строка интерпретируется как ложь, то бишь пока ты не выедешь одну букву и не нажмёшь энтер, он будет спрашивать перевод с перехлестом(для хуевиндовщиков, вроде меня) каретки не записывается в строку, можно считывать значения с побайтно, и джойнить их в строку, тогда даже перевод уже будет засчитан
так на что тогда мигрировать?
поглядел кучи рецептов по ускорению, вплоть до эксплоитов на плюсах, кажется.
Индиксация мне не подходит, потому что постоянный Insert. Думаю, остановится на многопоточности и реализации шаблона consumer. Еще говорят, есть кучи конфигов, которые не гонятся за производительностью.
Может быть вместе и сработает. Ну а еще докучи буду писать в память и только читать. Раз в какое-то время дампить в базу на диске.
Если был опыт в этом - коммить, анон
Тебе на лечение?
> За
> >>line in ['еще\n', 'этих\n']
> отдельное спасибо. Так действительно красивее.
Красиво обыденно, но не корректно с точки зрения выделения памяти тут нужна тупла, а не лист
Никак. Насколько помню есть какой-то пакет который умеет исходники тянуть с гитхаба и подрубать это говнище в рантайме. Для пипа есть pypi
Какой нибудь очередной парсер, который будет с виабушных сайтов пикчи аниме-девочек тянуть.
Хули, на что еще способен анон?
как принаровился, имею ввиду, юзать склайт? или переход на постгресс и было принаравлением? А щас чем пользуешься? какие профиты?
А хули им юзать учиться?
Тот же синтаксис +/-, подрубаешься и через курсор погнал ебашить команды.
Для постгреса потом другую либу и немного синтаксис подправить, если надо.
Профиты?
Ну если приложение нагружает БД то склайт сосет, а постгрес работает(хотя иногда и он 16 гигов оперативы сжирал и ложил комп). В склайте нет ilike, если делать поиск, то это критично.
Приноровлений никаких не было, все как по маслу.
Сейчас постгрес юзаю, все хорошо.
звучт отлично
зацените на грани бреда: а что если, я сделаю каждую работу с таблицей как отдельную базу данных? И буду в 135 потоках ебашть в них асинхронно? Ну и запрашивать в этом же потоке.
Может так быть?
То что ты описал похоже на обычную очередь. Там тебе SQL в любом виде не особенно нужен. Не знаю что там за 130 таблиц, обычно 100+ таблиц это невъебенно сложное приложение которое разработывали лет пять. Телепаты в отпуске.
агрегатор всякой залупы. Это на бэкенде сервачек парсит все что может. Там много одинаковых объектов: поля и домены ве сейм щит. И к ним даже идут одинаковые запросы из бэкенда. Вот этих таблиц 135. Окола 90 - подобны. Они заполняются в цикле и читаются тоже.
а как тогда организовать хранилище и анализ данных? Как быстрее - так мне и лучше
а что если это обертка над оберткой с тонной зависимостей и нулевым выхлопом?
Как-то рас пришлось беседовать с аноном - супер прогером сеньером помидором и 250к/мс со слов мудозвони, он ява-дрочер и не знал, что такое ООП на принципиальном уровне
Может что на графы, но их пока не освоил нормально.
>не знал, что такое ООП на принципиальном уровне
он тебя наебал
схлопотал ооп головного мозга в андроиде
Скрепинг это донное днище разработки. Если хочешь этим заниматься иди либо в Scrapinghub сразу работать, либо найди себе команду аналитиков и осваивай бигдату сразу.
Подскажите, как мне сделоть удалённое редактирование и отладку (особенно отладку) питоньей программы на удалённом сервере? Локальная машина на дебиане (можно пересесть на вин 10, но не хотелось бы).
Джва часа проебался с vscode и ptvsd и в итоге упёрся в баг, который они ещё не пофиксили - не останавливается на брейкпоинтах.
Присоединяюсь к господину
Ну так можно все обёртки над API вырезать нахуй.
Если сервис популярный и API состоит не из парочки методов, то почему бы и не создать заранее готовое решение для работы и упрощения жизни?
Логи не помогут, разрабы vscode/ptvsd признали это багом месяц назад.
Как редактируете-отлаживаете удалённые проги в своих проектах?
1. Оптимизируй свои запросы и ключи в таблицах
2. Перекатись на PostgreSQL, это не должно ничего поломать в твоей БД и программе
3. Если хочешь больше инфы - неси конкретику о таблицах и данных
Причём тут vscode твой?
Запускай программу из консоли на том серваке и выводи промежуточные результаты работы.
Я так и делаю.
А лучше про брейк поинты питоновские почитай, авось поможет.
>Запускай программу из консоли на том серваке и выводи промежуточные результаты работы.
Ты хочешь сказать, что это обычное дело в питономире? я крестоблядь прост
Судя по тому, что такой функционал есть, похоже, только в PyCharm Pro, дохуя кто живёт именно так.
> Ты хочешь сказать, что это обычное дело в питономире?
Не совсем, я просто таким не страдаю и вообще я быдло.
Я же сказал, почитай вот про это:
https://docs.python.org/3.6/library/pdb.html
Вдруг тебе поможет.
> такой функционал есть, похоже, только в PyCharm Pro
P.s. О каком функционале речь?
И еще - в какой иде пишете? Мне удобно когда можно писать код, компилировать его одним кликом и дебажить в той строке, где компилятор ругается. Пока использую компиляцию через консольку, но как то неудобно.
VSCode если готов почитать доки чтобы писать таск-конфиг для "запуска одним кликом".
Пайчарм я сам не люблю, но там наверное с "одним кликом" проще всё, но менее прозрачно.
>кроме того, что оно встроено прямо по ходу кода
Ну так я вот именно это и убирал же.
Вообще, что именно ты имел в виду под
>То есть если мне захочется превратить слово "французских" в "немецких", мне по новой всю часть кода с создания бэкапа повторять?
? Если ты хочешь второй раз пройтись по файлу, то в принципе да, всё заново, но смысл в том, чтобы за один раз всё сделать.
Ну и про бэкап. Зачем? Просто пиши в другой файл. А то ты копируешь файл 1 в файл 2 и потом, читая файл 2, пишешь в файл 1. Чего бы сразу не читать файл 1 и писать в файл 2-то? Если имя файла так нужно, то переименуй файл1 в файл2, *копирование, не имеет никаго смысла, потому что ты всё равно потом удаляешь и перезаписываешь всё содержимое.
Как найти кол-во байт нужное для хранение числа (положительного)?
Желательно не используя битовые операторы.
Я высрал только
((-x.bit_length() % 8) + x.bit_length()) // 8
это норм или хуйня?
Анализ вакансий для удалёнки немного разочаровал, работы не так много и в основном это бекэнд.
Всем нужны JS макаки
Байт не обязательно равен 8 битам. Хотя питоний интерпретатор вряд ли портировали на такие пизданутые платформы.
Django или Flask/Scrapy/Selenium/Requests/bs4/БД какую, в том числе не реляционную/Англицкий
ipdb
> неси конкретику
есть одна бд (свой агрегатор). В ней 135 таблиц. Все таблицы - подобны (одинаковые домены). Эти таблицы заполняются в цикле по одной. В том же проходе эта таблица читается. 1 insert | 2 select'а.
Полный проход цикла занимает от 340 сек до 700сек. Этот бэкенд на фласке питоне создает рест апи.
Как проще и доступнее организовать данные, чтобы их можно было легко записывать и тут же запрашивать анализировать?
https://github.com/PHP-FFMpeg/PHP-FFMpeg
А у питона хуйня которая только передаёт аргументы в Popen и проверяет что returncode не нулевой:
https://github.com/Ch00k/ffmpy/blob/master/ffmpy.py
О, круто PyCon уже в этом году был.
По-моему даже в JS-мирке аннотация типов (Flow/TS) намного популярнее чем у питонистов.
Я пока ни одну либу не встретил с аннотацией в сорсах.
Эм, мне нужно изменить исходный документ в том же самом месте, где он первоначально лежит. Если следовать твоей инструкции, мне придется копировать имя оригинального файла, производить основные операции, удалять оригинальный файл, а затем присваивать его имя новому файлу. С бэкапом проще, как по мне.
>aeneas is a Python/C library and a set of tools to automagically synchronize audio and text (aka forced alignment).
И при чём тут ffmpeg? У него вообще-то функционал намного шире чем >automagically synchronize audio and text
Ну это относительно недавно стало вот так вот выкатываться, раньше про такое никто особо не говорил, может взлетит, библиотека для проверки уже есть.
Думаю в следующем прожекте попробовать такое, выглядит довольно полезно.
> ffmpy is a simplystic FFmpeg command line wrapper.
Так а что ты от той библиотеки хотел?
Мало функционала? Добавь свой, это же гитхаб.
>Так а что ты от той библиотеки хотел?
ООП-ориентированный интерфейс к ffmpeg, вместо нечитаемой срани.
>ffmpeg -r 1 -loop 1 -i shit.jpg -i piss.mp3 -map 0:v -map 1:a -c:a libvorbis -q:a 9 -c:v vp9 -b:v 0 -crf 16 -g 64 -vf scale=-1:420 -shortest fuck.webm -y
stdout которой ещё потом придётся парсить.
>Мало функционала? Добавь свой, это же гитхаб.
Для того чтобы написать такую либу мне сначала придётся хорошо изучить ffmpeg (и вообще кодирование аудио/видео).
А тогда уже мне эта либа будет не нужна.
Да мне и не сильно нужно было, пока хватает subprocess.run без всяких либ.
Просто взгруснулось от того что у пхпшников есть, а у пиздонистов - нет.
Для начала снеси VS и научись, блять, базовой ебле в терминал.
Затем $ createdb db_name. И вообще https://www.tutorialspoint.com/postgresql/index.htm
Не создают базы "через питон". Создают консольными утилитами и потом подключаются к ним в питоне.
Но на твоём уровне вообще не рекомендую трогать psql, будет слишком больно. Для начала научись всё делать без ссаной IDE, потом попердоль sqlite.
>без ссаной IDE, потом попердоль sqlite
переезжаю с склайт. Без иде в рот ебал. Все создал через AdPostgress. Да, все происходит на винде. В рот ебал терминал, пользуюсь python. Все норм.
пойми, я не ради технологий делаю, а ради результата, который мне нужен чтобы облегчить и автоматизировать другую работу.
Добра тебе, анон
Ну удачи, надейся что твои остануться достаточно лёгкими под них можно было найти кнопочку в IDE.
Просто если ты тратишь часы на то чтобы решить проблему, но реальных знаний не получаешь, только находишь нужную кнопочку - в дальнейшем так и продолжишь тратить время на поиск кнопочек, вместо того чтобы начать понимать что ты вообще делаешь и научиться решать сразу пласт задач.
пикрил на нордике
понимаю о чем ты, прост голова другим занята, самими решениями, а не базой, на чем все работает
ты какой-то ярый противник ide и терминалодрочер? что плохого в ideшке? ну vs от мелкомягких не в счет, юзать эту санину - себя не уважать, то же самое касается шарпа и всего .net
там особо и паристь нечего, в stdout - строка байтов, просто раздеребань её на список и найди в цикле все нужное, поскольку она айпа, то можно это делать рилтайм в отдельно процессе, сложно ничего нет, но оборетка реально дерьмовая и особого смысла в ней нет, подтверждаю, сам юзал стандартный Popen, к слову, если тебе нужно просканить результат после скачки и неважны ошибки, то резоннее юзать check_output
Проблема не в самих IDE, проблема в тех кто юзает IDE на стадии обучения, а потом не понимает даже как скрипт запустить без этой IDE.
На "легковесные" IDE вроде VSСode это не распространяется.
мне кажется, что как раз в процессе обучения необходимы IDE (ведь речь идет не о бд, а о питоне?), ибо нет геморроя с табуляцией и можно легко посмотреть реализацию метода и документацию (если имеется) и много ещё других плюшек, которые просто облегчают жизнь, тем более, ты ведь знаешь что такое cmd винды и можешь адекватно оценить как вней работать (в сравнении с терминалом юникса), даже по человечески нельзя скопировать и вставить, не говоря уже об отсутствии возможности создавать виртуальные терминальные окна и всего прочего
>мне кажется, что как раз в процессе обучения необходимы IDE (ведь речь идет не о бд, а о питоне?), ибо нет геморроя с табуляцией и можно легко посмотреть реализацию метода и документацию (если имеется)
Я не предлагал писать код в vim. Всё это есть и в VSCode.
А вот запускать код нужно сразу учиться из терминала, а потом автоматизировать запуск/сборку скриптами или средствами
>тем более, ты ведь знаешь что такое cmd
Юзаю под виндой git-bash + Cmder. Настраивать их было немного больно, зато cmd не трогал никогда.
Для обучения лучше сразу ставить линукс, хотя бы на виртуалочку.
Анализируй проэкты на гитхабе, улучшай их или добавляй фичи
ну походу ты тогда какой-то дурачок, раз все прочитал и не знаешь куда приложить умения
А что ты хочешь уметь? Для чего питон учил?
Сам змеяч, хочу вкатиться в джангу, но есть проблема, именно - куда вкатываться?
Есть джанга 1.1 но она устаревает, а есть джанга 2.0, но по ней маловато гайдов. И то, что по идее работает в 1.1 в 2.0 уже не работает. Мне надо понять полный принцип работы, но мне неохота курить устаревший материал.
640x360, 2:03
Раньше всё блять работало, прошло два месяца и пиздец, уже где-то что-то проебал.
в чем суть вопроса?
ты не знаешь как экранировать спецсимволы?
ты не знаешь что строки могут обрамляться 3-мя типами символов: ', ", """ ?
>в чем суть вопроса?
Допустим приходит запрос ebola.com/show_me_dvacher?name=karasik
Склеиваем запрс:
sql_request = 'select dvacher.face from dvacher where dvacher.name like \'% + QueryDict['name] + '%\'
Так вот, если придет name=kar`asik, запрос не выполнится. Как сделать так, чтобы в запрос шел не kar`asik, а kar\`asik?
Да такто пох эти инъекции, у моей джанги права только на select, просто хочется чтоб запрос все равно выполнился
560x420, 3:26
Блять, меня смутило на ~20:04 то что для JSON'а неизвестной "формы" он использует Any.
JSON же вполне определённую, хоть и рекурсивную структуру имеет.
Погуглил, да, в рекурсивные типы пока не могут:
https://github.com/python/mypy/issues/731
Решил посмотреть, хотя только вкатываюсь. Если я когда пойду на работу начну везде тайп чекинг кидать, мне скажут, что я молодец или ебанат?
Что случилось в мире, что теперь в питоне затребовались типы?
Небось ещё скоро объявлять переменные захотят.
Забыл упомянуть, что это не просто массив, а array из numpy c dtype float, я как понял это просто массив с типом, или я аутист? Сейчас остальное не могу показать. У меня просто в голове не укладывается, где массив может измениться.
>>192439
В точку, из С++ в джаву, а на питоне скриптики и прототипы пишу. Очень простой красивый и быстрый в написании язык, завидую питонокодерам, потому что они не мучаются с синтаксисом, а пишут именно то, что должно работать. Есть рекомендации?
до сих пор не могу избавится от этой привычки
ты хотя бы покажи какие примерно аргументы у функции, какая структура, велика вероятность того, что ты пытаешься изменить тип, который не состоит из ссылок (неизменяемый)
Есть один джун, который работает под моим началом(я сам от джуна не далеко ушел, но этот еще зеленее), так вот, начали мы писать небольшой прожект вместе, пока я был рядом - все хорошо было, минимум костылей, максимум работоспособности, затем меня перекинули на другой проект, а джун остался мелкие примочки дописывать. Я периодически в комиты заглядывал и правил. Вот прошел месяц его самостоятельной работы над примочками и насяльника сказал выкатывать все. Я принялся за дело и охуел от пиздеца который он наворотил. Приложение крашится от минимально не так введенных данных, пользователь не оповещается о действиях совершенных, часть моего функционала не работает, костыль на костыле и на заглушке. Мне говорил, что все ок и готово. Я целую ебучую неделю правил это и так ничего не выкатил, ибо не упел.
Что я сделал не так? Что надо делать? Как избежать такого пиздеца? Как научить его быть человеком?
Он у нас 7 месяцев работает, вырос конечно, но то что он написал, стало откровением для меня.
ты судя по всему где-то в начале инициализируешь vals как-то так vals = exchanger
в итоге это приводит к тому что обращаясь к vals ты ссылаешься на exchanger, в питоне в отличии от СИ
a = [1,2,3]
b = a
a[0] = 0
print(b)
>0,2,3
если речь идет об изменяемых объектах, вроде листа или массива, нужно делать явное копирование,например так
b = a[::]
или гугли глубокое копирование
дс?
может дропнишь его, возьмешь меня?)
а если серьезно, то обилие костылей это проблема куратора, это мне явно дал понять мой последний, когда вышвырнул меня с предыдущей работы пинком под зад))
Спасибо, анон! Никогда бы сам не догадался, что язык такую мину подложит. Видимо, придётся всё-таки какую-нибудь книжечку по питону осилить. Извиняюсь за платину
забавно, что стековерфлоу на 70% усеян такими вопросами
> array из numpy c dtype floa
Сукаблять. Смотри, в обычном Писстоне список и тупля содержат не объекты, а ссылки на объекты. Поэтому, если объект mutable, то с его изменением изменится и список. Пример - пикрил. Так что в обычном Питоне твоя ситуация, когда изменяется float который immutable без явного values = хуй невозможна.
Наверное фишка в том, что dtype float numpy мьютабельный и ты на один такой объект указываешь и в values и в exchanger, и когда объект меняется в exchanger+=..., то это изменение видно и в values. Это только предположение, сам numpy никогда не трогал.
>У такого подхода к разработке есть свои плюсы
Я ничуть не писатель на Питоне, просто интересно, как до такой жизни докатились.
Раньше ведь не задавались такими вопросами.
это все ещё я
>1192439
>1192452
нечем занять себя вечером в пятницу слишком интересная и насыщенная жизнь, так что предлагаю тебе переписать этот кусок код под питоновский стиль
ссылаться индексами тут не принято, но это так к слову
Местный ДС, да и руководству норм, не уволят, только скажут "ну научи иво, вы жи команда".
Получается, что я виноват в его говнокоде? Как это пофиксить?
Р-развитие, язык не может стоять на месте или развиваться лишь в одном направлении. Посчитали, что это будет полезно, вот и добавили.
Хотя может это и деградация языка, время покажет, как это приживется у пистонистов.
посоветовать какую-то литературу, например из шапки поста, где первые 100 страниц одни паттерны, показать другие куски кода, написанные мидлами или сеньорами
з.ы.
открытых вакансий нет, что вообще значит местный ДС, он же только один, если рассматривать в масштабах РФ?
Век живи, век учись. Когда я проходил курс по питону, ничего подобного там не было. Всё-таки не зря тут спросил, спасибо, анон, что ты есть. Не грусти так, ты классный
> посоветовать какую-то литературу
Поробую, но сомневаюсь что вне работы он читать будет, я ему уже кидал книги по пистону и вот не знаю даже, помогло ли.
> показать другие куски кода, написанные мидлами или сеньорами
Только если носом потыкать
> что вообще значит местный ДС
Беларашко-ДС Минск
> Поробую, но сомневаюсь что вне работы он читать будет, я ему уже кидал книги по пистону и вот не знаю даже, помогло ли
возможно стоит более настойчиво это посоветовать, и намекнуть, что в его же интересах это а то джуном можно и просидеть очень долго
>Только если носом потыкать
Странная ситуация (но под предлогом первого можно и потыкать)
> Беларашко-ДС Минск
понятно, жаль, как там у вас вообще, на какой ставке у вас там джуны, в раисии говорят, что картошкой платите)
> возможно стоит более настойчиво это посоветовать
Я не препод, даже не знаю как настойчиво ему это сказать, если его это не ебёт особо.
> а то джуном можно и просидеть очень долго
а ему и норм, видимо, инициативы нет.
> на какой ставке у вас там джуны
От конторы зависит, года два назад знакомый устроился в iTransition на C# разраба и получал 350$, сейчас всё там же, но про зарплату не говорит. У нас джун получает 400$.
> картошкой платите)
Пиздят )
>получает 400$
х, как макдаке вобщем. Ебать раки ценники просадили, скоро нрн будут минет включать в пакет услуг
Да, но сделай скидку на цены, которые у нас пониже российских.
На сколько я понял из общения с хрюшей в одной компании(гораздо крупнее нашей), диапазон з/п для джуна у нас 300-450$
Причем тут вообще Си? Там вообще просто так нельзя копировать массивы типа a = b. Нужно использовать функцию из библиотеки, либо написать свою. А если ты будешь использовать указатели (или ссылки в С++), то получится такая же хуйня как в питоне - когда поменяешь значение переменной в одном массиве, то оно и в другом массиве поменяется.
>>192444
>В точку, из С++
Сомневаюсь, что ты на крестах хоть что-то серьезное кроме калькулятора писал, раз делаешь такие тупые ошибки.
>Причем тут вообще Си? Там вообще просто так нельзя копировать массивы типа a = b. Нужно использовать функцию из библиотеки, либо написать свою. А если ты будешь использовать указатели (или ссылки в С++), то получится такая же хуйня как в питоне - когда поменяешь значение переменной в одном массиве, то оно и в другом массиве поменяется.
Ну он человек простой, видит, что приравнять можно, приравнивает.
Скорее всего в этом случая простота языка, а именно отсутствия явных указателей и потребности в них привели к ошибки.
Вывод о си можно легко сделать по организации цикла, все писали по началу так
for i in range(len(somelist)):
...
вместо
for index, someitem in enumerate(somelist):
...
Как можно отключить проверку линтерами на определенном файле? А то джанго-файлы светятся как рождественская елка, и это бесит. почему производители серьезных вещей хуй кладут на восьмую ПЕПу?
По ткинтеру все же придется покурить мануалы. Он не настолько прозрачный, как вывод хэллоуворлда или рисование черепашкой.
Ну, и он вообще как бэ говно визуально.
Создай файл в котором пиши таймдату последнего выполнения. При вызове скрипта проверяй время сейчас > время_последнего_выполнения + 24, и если условие выполняется то скрипт делается, и в конце в файл пишется текущее время.
1. Русский подучи немного
2. На одном бэкэнде не выедешь особо, понимание JS понадобится, но он же простой на базовом уровне, быстро выучишь. Тем более Ajax, там же по сути 10 строк кода на фронте, что бы послать реквест и получить успешно/нет ответ. Да и с jQuery тоже самое, если что, по ходу разберешься в нем.
Эм. Ты наверное как-то жопой читал документацию, это же простейший кейс. Все ? заменяются переменными в cursor.execute.
дело оказалось в том, что при миграции из скулайт банальный int недостаточен для сохранения юникстайм. А он до миллисикунд и нах не нужен. Тем более селект по нему. Обломно 8 бит тратить на это. Урезал с обехи концов просто и встало, как надо. Вобще, конечно, перед началом проекта нужно даже прототайп по уму страться. Ато работает, да ладно. Хотя итеративное улучшение не имеет конца.
кароч, не с этого начинаешь. Если три типа фрилансеров. Первый, это когда ты работаешь на крупную кантору, и у тебя боковичек проходит, ато и на удаленку тебя переводят. Там ты по-сути себе хозяин и продаешь свой труд не получая ограничения на локацию. Хоть из леса работай, или с феста какого. Второй тип - это когда ты прошел уровень пидора на апворке и других фриланс конотор, а именно: работал полгода-год за 100-200 баксов в месяц, а потом репу прокачал из крутишься в 6-9 баков, потом в 8-12, потом резко до 20 баксов. Потом просто начинаешь выбирать и торговаться, потому что у тебя есть выбор. Пока выбора в заказах у тебя не будет, ты не сможешь дампить свой ценник. Тут тебе сарафанка в твоей лакации и заказы с апворка. Выбор есть. Это складывается в моем случае в 3 года. По ходу, ты встречаешь много технологий, которые еще продаешь на своей локации. Допустим, ты реализовал рест апи на андоиде под любое устройство, считай пол дела. Потом тебе и таксо и магазины и логисты - ток в путь. И есть третий вид фрилансеров. Это когда ты делаешь для себя и на этом имеешь деньги. Просто свои сервисы. Хорошо заходят агрегаторы, разного рода автоматизация, допустим из моего опыта адаптор для риелторов из крупного агенства, через которое они могли одновременно рассылать объявы на много ресурсов. Если ты фрилансер третьего вида, то ты - менеджер экономист, плюс у тебя есть прог скилл. Ты сам видишь куда что надо, проводишь аналитику, ресерч и дохуя предлагаешь, ну а потом даже можешь повыбирать
пардонирую за ошибки, ибо пьян. Конечно не дампить, а задирать
>>192823
Там API простенький, остальные варианты сложнее.
Можно еще PyGame использовать.
Вот пример вывода текста:
https://gcup.ru/publ/engines/osnovy_pygame_vvedenie/2-1-0-257
Можно выводить и картинки.
Lock program segments into memory. The value of op (defined in <sys/lock.h>) determines which segments are locked.
Availability: Unix.
Скажите, пожалуйста, какой эффект дает этот вызов, и каким может быть значение op?
Верно ли, что это позволяет предотвратить перекат памяти процесса в подкачку?
Спасибо.
File "./nh11", line 128, in <module>
os.plock()
AttributeError: module 'os' has no attribute 'plock'
Как это нет атрибута, когда по документации есть? ЧЯДНТ?
Если у тебя pylint, то можешь добавить коммент перед блоком с ошибкой #pylint: disable=номер или название ошибки
Например #pylint: disable=e1011
Разные ошибки можешь через запятую перечислять. А если хочешь сразу весь файл проигнорить, то #pylint: disable=all
дебил python читается как пайтон и не имеет отношения к змеям вообще никакого
Как ты получишь базовый урл, которому нужен протокол, домен и порт, не передавая ни протокола, ни домена, ни порта? Когда ты делаешь super()__init__() ты просто вызываешь __init__ функцию суперкласса, которая ожидает 3 аргумента, и передаешь ей только 1 - base_url, который к тому же и не определен в __init__ TestSuite
Какой умный малыш. А уроки сделал?
Ты либо очень тупой, либо тролль несмешной. Если первый вариант, то что ты видишь на логотипе?
Отображаются лишь у мажорных.
Делаю так
https://hastebin.com/upocosenoh.makefile
Имплаинг гитхаб не - собрание говнокода дебилов вроде меня. Где я тебе сеньоров с открытыми исходниками найду?
так ведь я думал что создам инстанс класса NetworkConfig, передам его в TestSuite, и вуаля! Соотвественно будет объект с базовым урлом в аттрибутах, откуда он и будет передан. Что я понимаю не так?
Ну и шизик.
from luboiUchebnikPoPitonu import naitiKubicheskyKorenIzChisla
>Что я понимаю не так?
Как работают функции, аргументы и наследование. Ты книжки вообще читал? Если ты думаешь, что написав class TestSuite(NetworkConfig) ты как-то указываешь Питону, что ТестСьют должен брать инстанс Нетворка и сам догадаться, как из него все нужное извлечь и записать, то ты неправ совсем.
>создам инстанс класса NetworkConfig, передам его в TestSuite
Ну значит делаешь инстанс, а в __init__ TestSuite надо будет обращаться к атрибутам\методам инстанса NetworkConfig и что-то с ними делать.
Берешь либу pil и выводишь. Для интерфейса юзаешь tk например. Ну или можешь системным в ос показывать просто выполняешь типа так (в линуксе)
import os
os.system("xdg-open tmp.png")
Ты б ещё фронтэнд посоветовал. ПО кто-то занимается?
Члена? Нет. Картинки? Да.
Как-то так.
Блять, не попадай в эту ловушку. На jquery возможно писать только костыльное неподдерживаемое говно. Иди сразу в vue или react. Не повторяй моих ошибок. Сейчас всё на реакт с этого говна переписываем, уже третий месяц.
Не слушай его, никакого реакта и тем более редукса. А vue верно, годнота.
>Влияет ли он на генераторы рандома из других библиотек
Если эти библиотеки его испольуют — да, очевидно. На нампи нет, у них своё.
>>193681
>Тоесть, надо пихать все и везде отдельно?
?!
Где ты хочешь засидить генератор, туда и пихай. Где-нибудь близко ко входной точке, например. От задачи зависит же.
Не понятен твой вопрос.
Ты думаешь функция их твоего модуля повлияет на одноимённую функцию из какой-либо библиотеки?
Я запускаю 1.py, который берет функции из 2.py ... N.py, в которых используются рандом генераторы из библиотек random, numpy, etc. Как мне установить один сид на весь проект? Достаточно ли написать random.seed() в 1.py? Или нужно добавить numpy.random.seed() и остальные? Или нужно добавить это во все файлы 1.py ... N.py?
Судя по этому вопросу:
https://stackoverflow.com/questions/36304187/is-there-a-good-way-to-share-the-seed-of-random-between-modules-in-python
нет, seed не шарится, если не шарить самому.
>копировать имя оригинального файла,
Ты и так это имя знаешь, иначе как ты открываешь файл?
>производить основные операции,
>удалять оригинальный файл,
Ты и так удаляешь бэкап
>присваивать его имя новому файлу.
Ты при открытии файла всё равно указываешь имя.
Только в твоём варианте ты просто так данные на диске копируешь, которые тут же перезаписываешь целиком. Представляешь, сначала гигабайт на диске передвинуть, а потом просто удалить это всё, зачем?
Вообще, обычно сначала пишут во временный файл, а затем им заменяют оригинал. Не уверен, есть ли нюансы, если исходные данные из этого же файла читаются, но по идее не должно быть. https://repl.it/repls/PreciousDishonestHashmaps
>Достаточно ли написать random.seed() в 1.py?
Да. Сам генератор-то глобальный, достаточно в одном месте инициализировать.
>Или нужно добавить numpy.random.seed() и остальные?
Ну ты что используешь, то и вызывай, блин. Выше уже отвечал, что random на numpy.random не влияет. Какие там у тебя ещё другие библиотеки понятия не имею, сам протеструй, на что они опираются.
>Или нужно добавить это во все файлы 1.py ... N.py?
Не нужно. Ну, точнее, где ты хочешь иметь контроль над состоянием генератора, туда и вставляй. Если у тебя весь скрипт просто отрабатывает один раз после запуска, то для повторяемости хватит и в одном месте где-нибудь в начале.
>>193718
Тут о другом речь же — о шаринге значения перемной (а уж сид это или нет разницы никакой).
>На jquery возможно писать только костыльное неподдерживаемое говно
Совсем долбоеб? Ты хоть понимаешь как оно работает?
Имеется ли некое подобие autoexec для консоли Python (в Pycharm) и как вообще из консоли вызывать файлы с кодом ?
Я редактирую некий скрипт в открытом в Pycharm файле, но иногда нужно попробовать какую-то операцию/и в консоли, т.к. это удобней, чем запускать часть скрипта . Однако, предварительно нужно как минимум ввести команды загрузить нужные модули, подключить директории, открыть файлы.
Как сделать, чтобы скрипт с этими действиями (import xxxx,yyy; open (myfile1); open (myfile2);..) , например, autoexec1.py можно было вызывать сразу из самой консоли ?
Прописывать скрипт в settings-Build & Exection - Python Console не совсем подходит, т.к. для разных задач такие автоэкзеки могут быть разными.
Пока используют костыль типа import autoexec1 as a, но получается, что все объекты я должен использовать как a.x1, a.x2...., что неудобно
В общем, можно ли такое (запуск набора команд через короткую команду) сделать в консоли или проще записать их где-то и ctrl-c ctrl-v в консоль ?
1. python -i script.py
Выполнит скрипт и оставит тебя в интерактивной консоли.
2.
>все объекты я должен использовать как a.x1, a.x2....,
>from autoexec1 import *
3. exec(open("./path/to/script.py").read(), globals())
Бонус:
4. export PYTHONSTARTUP="path/to/script.py"
И будет выполняться при каждом запуске интерпретатора. Удобно всякие частоиспользуемые urllib'ы и нампи там подгружать, например.
>все объекты я должен использовать как a.x1, a.x2....,
>from autoexec1 import *
>exec(open("./path/to/script.py").read(), globals())
пасиб братюнь. Только пришлось еше open (... , encoding='utf-8') сделать, хотя Python 3 должен жи файлы в UTF без доп настроек открывать
>python -i script.py
somepr = somef
func.somef
Не могу , всегда сплю одмнаковое количество времени 4 часа не могу не больше не меньше может бывает у кого думаю из-за нагрузки
ну, во-первых - тесты. никакая хуйня не пушиться в репу без тестов, автоматизированных с помощью CI. во-вторых, грумить таски на мелкие фичи. в-третьих, каждая фича - отдельный мердж реквест. четвертое и последнее - код ревью каждого реквеста. тщательное блять. джун завтра зассыт и съебет, а разгребать тебе, так что не пропускай даже маленький кусочек говно, заставь его навести порядок. покрытие тестами ни при каких условиях падать не должно. внимательно проверяй насколько хорошо разобраны кейсы. обращай внимание на цикломатическую сложность написанного джуном кода - если у него там ольше двух уровней вложенности или несколько ифов - он через пару суток уже не поймет собственный код и разгребать это опять таки тебе. в общем, говно легче разгребать ложечкой, а не ведрами таскать.
Спасибо тебе, антош, учту на будущее.
Ищи что тебя интересует, не ищи рандом. Веб — ищи веб, геймдев — ищи геймдев, итд.
Есть текстовый файл, в каждой строке которого 4 пробела, а затем число вида 3.890190741743E-02
Мне нужно записать число из каждой строки в трехмерный массив. Я уже почти наговнокодил алгоритм для обработки этих данных, время поджимает, а я не могу нормально из файла данные переписать. Подскажите как без подводных камней нормально создать массив, допустим 30х30х30 Я так понял что для многомерных массивов нужно NumPy юзать и корректно забивать построчно в него данные из документа(нужно чтобы это были вещественные числа как в примере выше. Короче самое главное, обьясните пожалуйста как правильно к конкретной строке файла обращаться, как не обосраться из за пробелов(если они являются проблемой конеш) и как преобразовать эту строку в соответствующее число. А то мне блядь еще обработку этих данных неделю дописывать, а я их даже забить в массив нормально не могу
>>194416
Я тупой в общем, не знаю вашего пистона, алгоритмов и проче хуеты.
Генератор твоего файла с числами вида 3.1224Е-1488 - https://ideone.com/Nk5lCs
Генератор трёхмерного массива если я его правильно понял, нихуя не учил ж макака с переводом твоих богомерских чисел в нормальный float, но там не работает чтение из файла построчно, прогоняет только первые 30 строк и всё, лень разбираться - https://ideone.com/pEGbUG
Можно попробовать заколхозить readlines() и генераторами добавлять по единице в какую нибудь внешнюю переменную чтобы по ней читать массив со строками. Всем споки ноки. Можете обоссать мой код и сказать где косяки, будет полезно.
>конкретной строке файла обращаться
for line in open('suka'). Если надо несколько раз обращаться suka = open('suka').splitlines(); suka[0] но тебе не надо
>как не обосраться из за пробелов
А как ты из-за них можешь обосраться? Если у тебя 4 пробела, потом число, то: line.lstrip()
>как преобразовать эту строку в соответствующее число
float спокойно переваривает такие записи
1. readline
2. float(str.strip()) - и strip может даже не нужен
А вообще пандас или сам нампи должен уже уметь считать и распарить всё в numpy.array самостоятельно, если сможешь объяснить ему что ты хочешь.
> Как создать массив...
Просто берёшь и создаёшь. Хоть блядь файл в numpy.array считай и передай его в numpy.ndarray(shape=(30,30,30), dtype=float, buffer=datafromfile).
Может нехуй вкатываться в незнакомый язык за месяц до защиты диплома/курсача?
Перед отходом ко сну осенило, что 30х30 = 90 - двумерный массив а нужен 30х30х30 и это нихуя не 90.
https://ideone.com/yqMVlB - генератор файла
https://ideone.com/L9g4Op - генератор массива
>>194453
сяп за float('govnoE-1')
>>194455
>>194454
Спасибо парни, после работы разбрусь с тем что вы написали
>Может нехуй вкатываться в незнакомый язык за месяц до защиты диплома/курсача?
Нет выбора, мне нужно наколхозить алгоритм который расположит эти данные в массиве в нужном порядке, посчитает их координаты в модельном обьеме и выберет только нужны. Там буквально на 8 часов беспрерывного ковнокодинга если знаеь язык, но бля за паскаль меня бы защита санными тряпками закидала. Плюс нет разницы во что вкатываться, когда за месяц до защиты у тебя нихуя не сделаноэтому конечно есть рациональное обьяснение, но кому это нахуй интересно а пиздовать еще год хуи пинать ради защитыили ваще сапоги топтать совсем нет желания, лучще уж я потеряю сон на пару недель
Изучи графический интерфейс и пиши, что тебе надо, если конечно основную базу знаешь.
Мне плевать, что твой map живет пару секунд, не ломает ничего глобально, и вообще никак не мешает, ведь ты не пытаешься вызвать оригинальный map как функцию. Я найду и выебу тебя прямо в рот.
>Как запустить многопоточность?
Смотри картинки. Твой sim это ни разу не главный тред, а его таргет функция вызывает ГУИшный canvas. Это плохо.
>определенное время чекал
Ты с ума сошёл, куда тебе true должен верунться, в шелл, что ли? Током ёбнуть?
А если ты просто про то, что ничего на экране не появляется — так ты и не выводишь. Это только в интерактивном режиме всегда пишется возвращённое значение. print() тебе в помощь.
Всем всё платится.
В общем пишу плагин для kodi(медиаплеер типа smart tv) для анимца со скрапером ссылок на видео с shikimori.
На shikimori на каждый эпизод может быть много(думаю может доходить до 50 и это только на один эпизод) ссылок с разными командами локализации и разными хостингами.
Когда пользователь выбирает эпизод в интерфейсе kodi который хочет посмотреть, то выбор ссылки для скачивания должен происходить автоматически, а эпизод сразу должен воспроизводится без лишних дополнительных пунктов и диалоговых окон.
Задача:
Сделать автоматический подбор ссылок релевантным для пользователя.
В настройках дополнения планирую добавить выбор типа локализации (озвучка, саб), и сейчас думаю добавить настройку "приоритетного списка" в котором будут находиться предпочтения пользователя, какие команды локализации ему больше нравятся.
В общем анон насоветуй хоть что-нибудь, а то кривые велосипеды изобретать не хочется
Я тебя не понимаю совершенно.
Я копирую исходный файл в виде бэкапа, потому что записывать сразу же в исходник нельзя (при открытии на запись все стирается). Я беру и читаю бэкап, и строки оттуда переношу в уже голенький исходник.
Если же я буду записывать строки из оригинала в бэкап, то мне потом все равно придется взять все строки из бэкапа и поместить обратно в исходник.
Так зачем заставлять программу гонять по строкам вдвое больше, если я могу с самого начала просто создать копию оригинала и помещать строки из нее в исходник?
На одном компьютере скрипт с записью файла работает. Наьдругом тот же самый скрипт не работает, пока ему encoding utf8 не прописать. Причем этот же инкодинг нетработает на первом компе.
А сейчас просто какая-то поебень. Скрипт работает, если запускать его через ИДЕ. И он же, сука, не работает, если его просто даблкликом открыть. Всегда работал, щас не хочет. Какой-то трейсбек на долю секунды высвечивается, чет тип файл не найден. Ебанутый что ли? Вообще охуеть.
>Скрипт работает, если запускать его через ИДЕ. И он же, сука, не работает, если его просто даблкликом открыть.
Окружение?
При вводе:
exec(open('myfile.py').read())
мне выдает ошибку :
FileNotFoundError: [Errno 2] No such file or directory: 'myfile.py'
хотя этот файл лежит в директории которая прописана в sys.path
Чому он не может найти файл?
>Пропиши полный путь к файлу
помогло, но неужели мне каждый раз при обращении к модулю вводить полный путь к нему?
Говорю же, найди способ посмотреть дерикторию, в которой на данный момент находишься. В пайчарме, к примеру, сразу показывается путь, в котором работаешь.
Так как код с сайта с документацией, а не с форума, поэтому, должно быть, проблема на моей стороне.
Да, я понимаю что кинуть ссылку и написать "разберитесь за меня" - это ужасно некрасиво.
open() не имеет никакого отношения к sys.path или PYTHONPATH, он всегда
>каждый раз при обращении к модулю
Модули загружаются через import. Если ты вручную читаешь файл, то ответ да, каждый раз. Либо положить свой "модуль" куда-то поближе и читать через относительный путь.
Анон, а как это лучше сократить, чтобы держать лимит в 79 символов? Я все правильно сделал, по пепейту, питон вей?
file.writer(firstarg, secondarg)
Знаю что можно сделать отдельную переменную, и там воссоединить firstarg и secondarg. Но есть ли более изящный вариант?
Какая разница? Работает через запуск из блокнота, не работает по клику на файл в папке.
Черная магия, ей-богу.
https://instagram.com/p/BjFD7O6lO-3/
Врушка. Сделай open('./файл') и покаж ошибку
if some is not None замени на просто if some. И новом блоке уже пиши if some.gettext bla bla.
Либо try используй, либо ту строку в переменную засунь, но там вроде всё равно не влезет.
У нас тут не ЖС, каждый день по новому фреймворку не выходит, так что почти всё (кроме питона 2.х и всяких доисторических статей) актуально. Что именно там в шапке я, если честно, не в курсе.
>>195020
file.write(firstarg+secondarg) ?
Пишутся же в любом случае либо строки, либо байты, а значит и соединить их можно элементарно.
>>194774
Вставь ты, блин, try/catch с input()'ом да прочитай эту ошибку. А ещё лучше просто из консоли его запусти, вангую проебался ты с путями.
>>194990
is not None тебе там зачем? И раз уж всё равно на 3 строки, так и сделал бы лучше
>result = bs.find() and bs.find().get_text()
>if result == "Nothing found":
> print("Нихуя нет, блядь")
Многострочные if'ы, по-моему, это почти самое убогое, что можно сделать. Но лучше ещё мнения послушай.
Алсо, 79 знаков для лохов.
Сделал, все-таки, как этот >>195070
анон сказал, вроде звучит логично.
Я тут скриптик написал, чтобы анимешные картиночки качать, может посмотрите, аноны, оцените? https://pastebin.com/JVvviYE0 над чем стоит поработать? над английским точно нужно, не судите строго за это
Думаю, что синтаксис я уже освоил, в каком направлении двигаться дальше?
В целом пойдет, но условия и генераторы вырвиглазно выглядят с этим tqdm. Нужн рефакторинг, sys.argv и по мелочам. почему не requests?
есть список arr = [хуй, пизда, джигурда]
я хочу выкинуть "хуй" из него:
arr = arr[1:]
куда физически денется объект "хуй", который был по arr[0]? будет существовать неприкаянный до конца процесса? этим можно как-то управлять?
Пока его не соберёт сборщик мусора. В принципе можно его(gc) явно вызывать,но не советую.
спасибо
Ты об этом? Добавил. https://pastebin.com/BCSP4uxm
Кстати, есть ли смысл возвращать None после сис.еррора?
>Ты об этом?
Не об этом. У тебя на 54 строке идёт tags = input() и tags сразу идёт в дело без проверки. Если я не введу никаких тегов - меня кинет на "главную", так задумано? Аналогично с folder = input(), я не знаю как пайтон реагирует на os.mkdir('./images//'), но ты глянь там.
Пойду ещё напишу CLI версию, тогда так же это называется? ну, типо, с параметрами из командной строки.
И правда, блядь, что это, где я это отрыл, пиздец.
Да, пойду-ка почищу все.
1. Коментарии кто писать будет? (нужно больше, не жалей "бумагу")
2. Проверка наличия/создания папки, лучше так будет:
if not os.path.exists(img_path):
____os.mkdir(img_path)
3. Я б заменил sys.error на:
try:
____....
except SomeError as error:
____ print(error)
3. Немного адок из-за съехавшей разметки
А так вполне себе неплохо.
P.s. В будущем перепиши на asyncio/aiohttp скачку.
Вот именно для этого придумали докер.
>даблклик
Под виндами да, боль. Но обещают в 3.7 поправить и выпилить нахуй всю эту дрисню с кодировками и посадить всех на UTF-8, даже виндоюзеров.
Открой для себя setuptools entrypoints. Ещё нормальные люди обычно в README пишут как запустить.
Дайте самую новую самую годную книжку по питону 3 на английском без разжевываний для вкатывальщиков.
Скажу сразу, я его рассматриваю не как язык для разработки, а скорее для скриптов как замена башу и хобби типа "хакинга". Если еще будет книжка по сетевому программированию в питоне – вообще отлично.
Пiшов вон
Мне кажется, либо ты не понимаешь, о чём я говорю, либо ты не понимаешь, как работают операции с файлам.
>при открытии на запись все стирается
Т.е. ты скопировал кучу данных и тут же всё удалил. Тебе не кажется это немного бесполезным?
>Я копирую исходный файл в виде бэкапа
Не копирий, просто сделай исходник бэкапом, переименовав его.
>os.rename(source, backup); open(source, 'w')
>copy(source, backup); open(source, 'w')
Дадут один и тот же результат, но первое не делает ненужной работы.
>заставлять программу гонять по строкам вдвое больше
Это как раз таки ты вдвое больше нужного делаешь.
Сложно привести аналогию, так как в реальном мире "копирования" не существует, но вот представь, что тебе нужно перебрать игрушки в ящике, причём так, чтобы в конце всё оказалось в ящике с надписью "Болты", в которой они изначально и лежат. Одновременно две коробки с такой подписью иметь нельзя.
Итак, что разумнее:
1. (Твой) Взять коробку с напистаь на ней "временное", переложить в неё все игрушки (тут я как бы соединил копирование и очистку файла) а затем уже начать перекладывать игрушки обратно в уже пустую коробку "Болты", заменяя сломанные на новые, а затем сжечь коробки "временное"
2. (Мой) Фломастером заменить надпись "Болты" на "Старые Болты", взять новую коробку и написать на ней "Болты". Затем уже перекладывать игрушки из "Старых" в "Болты", заменяя сломанные на новые. Сжечь коробку "Старые Болты".
Видишь тут лишний шаг?
Ты ебнишься засовывать расширения, которые должны работать после открытия я когда-то с этим ебался более 5 часов, потом просто плюнул и прокинул трафик через проксю (кстати в селениум хроме для прокси с лог:пассом отдельная ебень с плясками)
>Мне кажется, либо ты не понимаешь, о чём я говорю
Внезапно!
>Я тебя не понимаю совершенно
Но я тебя понял наконец-то. Спасибо снова.
Почему ты подписываешь ящик с игрушками как "Болты"
>обещают в 3.7 поправить и выпилить нахуй всю эту дрисню с кодировками и посадить всех на UTF-8
Это очень хорошие новости. Держу кулачки.
Нужно было ставить linux
def writer(ips, e = "default"):
__try:
____file = open("ips.txt", "w+")
____if e == "default":
______file.write(ips+"\n")
____if e == "
______file.write(ips + " - p\n")
__except:
____print("Some problems with writing to file")
__finally:
____file.close()
Аноны, как фиксить?
Нет, именно в IDE. Я нажимаю на кнопку - а в результат выводит на след. строку IDE.
Интересно девки пляшут.
w+ будет затирать все строчки, используй a+ что бы добавлять в файл.
вместо try/catch используй менеджер контекста(with).
Да и ты понимаешь что при вызове функции ты будешь открывать/закрывать файл постоянно? Намного логичнее открыть файл -> записать всё что нужно -> закрыть.
оу, нет обосрался чутка. + означает открыть для чтения/записи. Так что да, + тебе не нужно.
Как записать в файл переменную типа float и turple?
а в идеале еще и результат этой строки
max = np.unravel_index(np.argmax(ar, axis=None), ar.shape)
>Как записать в файл переменную типа float и turple?
str() или json.dump() в зависимости от задач.
>Экземпляр какого-то np класса
Скорее всего >>195793 подойдет, если этот файл ты будешь читать тоже питоном. Иначе - преобразуй его в json или yaml. yaml - если его будут читать люди, иначе - json.
Как изменить maximum recursion depth ?
бэкбон
Спасибо, но это веб-макакинг какой-то, попробую matplotlib.animation.FuncAnimation
У нас тут не ЖС, каждый день по новому фреймворку не выходит, так что почти всё (кроме питона 2.х и всяких доисторических статей) актуально.
import sys
sys.getrecursionlimit() # актуальный лимит
sys.setrecursionlimit(100) # ставишь свой
Но осторожно, если выставишь слишком много, то программа может вылететь.
Бетку уже выкатили, можно пробовать.
Если ты не знаешь, что такое комплексные числа, даже погуглив, то могу гарантировать, что в жизни, и уж тем более в твоём программировании на питоне, они тебе не будут нужны.
>>195981
https://bastibe.de/2013-05-30-speeding-up-matplotlib.html
демка подобного метода когда-то давно стыренная откуда-то https://pastebin.com/JVfALYKq
>>196089
Эй, ты зачем мой пост украл?
Я кстати тот JS макакий что вкатываетсч в питон. Прочел относительно бегло "кусь питона". Хочу сказать что все же для новичка она не полна. Не очень подробно развернута система классов. Как передается в экземпляры класса self. Как определяется контекст вызова. Как работает все это ? В js прототипы . Короче маловато )
https://www.youtube.com/watch?v=SJ8z-TF07s4
https://www.youtube.com/watch?v=mTp2pLEoDaI
И вообще отсмотри
https://www.youtube.com/playlist?list=PLlb7e2G7aSpTTNp7HBYzCBByaE1h54ruW
Алсо, я тоже начал изучать Питон после JS и как же мне блять горит от того что хотя они очень похоже внутри, даже в плане ООП, но в Питоне всё няшно и удобно, а в JS - ёбанный пиздец.
Ящитаю корень всех зол - то что JS трясётся над обратной совместимостью, а так бы давно все косяки поправили. А Питон на совместимость срёт и правильно делает.
Ну так это не исчерпывающее руководство, а лишь краткий обзор фич и возможностей питона. Она ведь и совсем тонкая. За подробностями надо в другие книги лезть.
Спасибо анон !
>Не очень подробно развернута система классов
Так там всё интуитивно понятно же.
>Как передается в экземпляры класса self.
У нас ебли с this'ами. self явно передаётся в метод класса (соответственно, и имя может иметь любое), т.е. при вызове obj.method(a, b) питон на самом деле под капотом просто вызывает Class.method(obj, a, b).
>Как определяется контекст вызова.
Опять же, у нас нет ебли с this'ами, так что того контекста можно сказать и нет. Вызванные у объекта методы всегда будут иметь этот объект в качестве self'а.
Есть всякие контекстные менеджеры, но там всегда всё явно указывается.
А есть какая-нибудь короткая книжечка по фуллстэку без воды чтоб прочитать всё за 15 минут и научиться, ну, для тех кто умный такой?
забыл. Суть игры в том. что она рандомно выбирает фигуру и рандомно присваивает параметры. Далее спрашивает у пользователя площадь и периметр. Должно быть, конечно, еще так, что если отвечают неправильно, но она прекращает работу, но я нихуя не понял как это сделать и хочу хотя бы ее запустить.
Я хз, мне нужно запустить выполнение функций из класса Game. Есть шанс это запустить?
там же ЛИСП, не?
> Я хз
> мне нужно
Может быть для начала хоть одну книжку по основам прочтёшь?
Даже если ты запустишь - оно не будет работать вообще никак. У тебя синтаксические ошибки там.
> функций из класса
> функция
> из класса
Ещё раз - читай литературу вначале.
Для запуска метода класса, нужно к нему обратиться, обращение делается через точку Game().StartSosat()
Есть список который нужно обработать.
Нужна функция которая будет обрабатывать этот список.
Как лучше реализовать это? Сделать функцию, которая будет работать с одним элементом списка, и зацикливать этот список на уровень выше, или сделать цикл внутри функции?
Меня интересует скорость таких подходов, влияет ли на скорость многократный вызов функции или нет? Если нет, то сделаю функцию для обработки одного элемента, а не списка, т.к. это гибче.
И точно! С моим стремлением к однострочным выражениям странно, что я так редко использую map.
def ppp(x):
print(x)
map(ppp,s)
И какого хера оно ничего не показывает? Объясните тупому начинающему на пальцах
Ну ка поясните быстро по полочкам что бы я не перерывал гугл.
1) Норм 2D движок для реализации карточной игры
2) Норм GUI для Шиндос.
Писал давно и тогда были ебаные PyGTK и Tkinter. PyGame в принципе полностью устраивает меня для моих целей а вот интерфейс хотелось бы посимпатичнее так как вышеуказанные говно полнейшее. Отказываюсь верить что в 2018 все еще не делают красивый интерфейс на питоне и я не о PyQt.
Tkinter, PyGTK, PyQT5
Попробуй ещё распулить по ядрам через мультипроцессинговый аналог, сразу раза в 4 быстрее.
https://vk.com/dev/apps_init?f=3. auth_key
Где производить эту проверку?
Так теперь называют подготовку к ЕГЭ? Школоло, не агрись. Будет и на твлей улице проект. Готовься к экзаменам.
Я не понимаю, схуяли ты доебался к тем двум неделям? С чего ты взял что у мен ЕГЭ?Я в принципе из беларахи и, у нас ЦТ Но тем не менее, я школку уже закончил, как и универ, а ты проецируешь свои фантазии на окружающих, пиздуй назад в /б/ к сородичам и там "тралль"
Не указывай куда мне идти. Мне допизды как вы в potato republic называете ЕГЭ. Хорошо, я поверю, что у тебя 2 недели «отпуска» и ты закончил ВУЗ. А теперь успешный погромизд отъебись от меня.
Коммунист, отъебись от меня. Иди интернационал петь в центральном парке.
>Нет, учи JS-стэк
Но я хочу стать питон-разработчиком, а aiohttp на hh упоминается только в вакансиях сеньоров с 200к+
Бамп
Нет, я хочу знать как это вообще работает. Как получить координаты нажатия, например? Координаты при зажатии, в конце. Как сохранять одновременно и на холсте и в памяти чтобы работать с буфером обмена?
Если нужно сделать обычносайт, то твой выбор лишь Django/Flask. Aiohttp тоже учи, но как дополнение, под узкие задачи, ну и в принципе его юзать вместо requests, если нужно делать много долгоиграющих запросов.
Как раз вот, может там поинтересуйся:
https://www.reddit.com/r/Python/comments/8mhzzq/we_are_programming_a_game_in_tkinter_70done_and/
Я, конечно, могу и сам накостылять через треды или https://repolinux.wordpress.com/2012/10/09/non-blocking-read-from-stdin-in-python/ но хочется уже готовое и красивенькое, с историей, поиском, копи-пастом, автокомплитом, чтобы нормально передвижение курсора работало, отдельная строка для ввода и так далее.
Пилил такое на ЖСе себе, на питоне уже лень, хоть там и пара сотен строк всего был.
Сама задача: хочу запилить себе интерактивную обёртку над телнет либой с плюшками.
Да, только из говна и палок там можно сделать работу с текстом. А вот как работу с файлами организовать - вообще не получается
http://pepy.tech/
А вот, кстати, и применение подобной няши(не так давно поднималась тема типизации такой) на практике(выглядит непривычно):
> def find_random_projects(self, nr_items: int = 10) -> List[Project]:
https://github.com/psincraian/pepy
бесполезная хрень.
Всё работает прекрасно, кроме того, что почти всегда после вызова питоньего скрипта ломается терминал: нажатие enter'а не переносит на новую строку, а добавляет "user@host:path $" на ту же, введённый текст не отображается, а нажатие стрелки вверх не показывается предыдущую команду (хотя если нажать enter, то она выполнится).
Что и где ломается? Упрощённо выглядит примерно так: https://pastebin.com/C9NQvEV4
Как в этой задаче считать входные данные?
http://pythontutor.ru/lessons/lists/problems/kegelbahn/
Файл в буфере обмена это на самом деле текстовый путь до этого файла, так что не вижу проблем.
>>198129
>Вызываю в отдельном треде через subprocess.run баш-скрипт
В отдельном процессе
>после вызова питоньего скрипта ломается терминал
А если запустить башскрипт, то такого не происходит?
>stdout=subprocess.PIPE
Зачем это?
Вообще, что тебе в итоге нужно получить? Только скриншот?
Мне лень качать, устанавливать и запускать винду в виртуалке ради этого.
Скопированный в буфер обмена файл - это не весь файлик, выгруженный в оперативку, это только строка вида "file:///path/to/file"
Соответственно, если тебе нужно с указанным файлом что-то сделать - делаешь сплит по 3 слешам, берешь 1-й элемент массива. А дальше что тебе нужно сделать - ты не сказал.
Путь у тебя есть, что тебе еще нужно?
>В отдельном процессе
Не, я в отедельном треде запускаю отдельный процесс :3 и дожидаюсь прямо там его выполнения. Их 50 штук просто, а сетевых запросов много. В питоне жонглировать Popen'ами как-то было лень, вот и въебал тредов.
>А если запустить башскрипт, то такого не происходит?
Нет. Проблема именно в использовании stdout/stderr. Я там забыл упомянуть, в ffprobe 2>&1, а в ffmepg 2>/dev/null ещё присутствуют, но это так-то только на одну команду же должно распространятся в любом случае.
>stdout=subprocess.PIPE Зачем это?
А, ну там в конце echo $out_filename ещё делается, мне его захватить надо.
>Вообще, что тебе в итоге нужно получить? Только скриншот?
Да, получить скриншот (названный по длительности видео) и его имя (путь к файлу) для дальнейшей работы.
Я и ранее встречался с подобной поломкой текущей вкладки/сессии терминала, и тоже к субпроцессами было связано, где-то какой-то поток не закрывается правильно, видимо.
Так вот само издание вышло в 2009г, статья с хабра 2013. Уже есть 6 издание, не лучше начать с него. Или особой разницы нет?
Мне бы его скопировать в другую дерикторию
program.py
from tkinter import
import module1
import module2
def b5():
return module1
def b6():
return module2
root = Tk()
root.title("Семён оказался на мели")
root.geometry("380x250")
btn4 = Button(text="Семён пошёл на работу", command=b5)
btn5 = Button(text="Семён остался дома", command=b6)
btn4.pack()
btn5.pack()
root.mainloop()
module1.py
from tkinter import
def b1():
label = Label(text="Семён win")
label.place(relx=.2, rely=.3)
return label
def b2():
label1 = Label(text="Семён fail")
label1.place(relx=.2, rely=.3)
return label1
root1 = Tk()
root1.title("Семён работает")
root1.geometry("380x250")
btn = Button(text="Семён работал усердно", command=b1)
btn1 = Button(text="Семён ленился", command=b2)
btn.pack()
btn1.pack()
root1.mainloop()
module2.py
from tkinter import *
def b3():
label2 = Label(text="Семён win")
label2.place(relx=.2, rely=.3)
return label2
def b4():
label3 = Label(text="Семён fail")
label3.place(relx=.2, rely=.3)
return label3
root2 = Tk()
root2.title("Семён остался дома")
root2.geometry("350x280")
btn2 = Button(text="Семён стал мангакой", command=b3)
btn3 = Button(text="Семён воровал еду", command=b4)
btn2.pack()
btn3.pack()
root2.mainloop()
program.py
from tkinter import
import module1
import module2
def b5():
return module1
def b6():
return module2
root = Tk()
root.title("Семён оказался на мели")
root.geometry("380x250")
btn4 = Button(text="Семён пошёл на работу", command=b5)
btn5 = Button(text="Семён остался дома", command=b6)
btn4.pack()
btn5.pack()
root.mainloop()
module1.py
from tkinter import
def b1():
label = Label(text="Семён win")
label.place(relx=.2, rely=.3)
return label
def b2():
label1 = Label(text="Семён fail")
label1.place(relx=.2, rely=.3)
return label1
root1 = Tk()
root1.title("Семён работает")
root1.geometry("380x250")
btn = Button(text="Семён работал усердно", command=b1)
btn1 = Button(text="Семён ленился", command=b2)
btn.pack()
btn1.pack()
root1.mainloop()
module2.py
from tkinter import *
def b3():
label2 = Label(text="Семён win")
label2.place(relx=.2, rely=.3)
return label2
def b4():
label3 = Label(text="Семён fail")
label3.place(relx=.2, rely=.3)
return label3
root2 = Tk()
root2.title("Семён остался дома")
root2.geometry("350x280")
btn2 = Button(text="Семён стал мангакой", command=b3)
btn3 = Button(text="Семён воровал еду", command=b4)
btn2.pack()
btn3.pack()
root2.mainloop()
Ты сделал какое-то говно. Ты запускаешь три разных ткинтера, три разных мейнлупа. Если тебе нужно несколько окон, то погугли, как это сделать.
И насчёт
>def f(): return module1
Это хуета несусветная. На строке
>import module1
У тебя уже исполняется весь файл.
Запихни всё, что в глобале из модулей в функцию и вызывай её когда надо. Того, что у тебя хуёвая архитектура это не отменяет.
Мне бы всё наоборот в одном окне, но не знаю, как сделать.
А чем плох асинхронный пул реквестов?
у вашей обсосанной aiohttp совместимости с более старыми версиями нет из-за того что какой-то дятел решил ввести типизацию нерабочую
automating boring stuff
Хех, пока решал другие проблемы случайно нашёл, как воспроизвести синдром: перевести stdin в raw режим:
>import sys
>import tty
>tty.setraw(sys.stdin)
И будет достигнут тот эффект, который я описывал.
Ну а дальше мысль легко пошла: ffmpeg же действительно имеет интерактивный режим (по-дефолту), видимо и менявший режим stdin'а, но почему-то не возвращавший его назад. Добавил -nostdin в вызов и всё стало окей. Спасибо мне.
for i in list:
list[i+1] = 'какая-то хуйня'
Выйдет string index out of range, конечно. Как без лишних if по достижению конца списка перейти в начало списка? Чтобы list[0] = 'какая-то хуйня'
Ладно, я имел в виду вот что:
for i in range(len(list)):
if list[i+1] == 'какая-то хуйня':
list = 'такая-то хуйня'
Мне нужно, чтобы последний элемент менялся, если выполнено условие для первого элемента.
Есть тут аноны, которые шарят в pyqt?
Добавляю в qgridlayout n-ое количество кнопок,на определённые позиции, после чего мне нужно удалить их и добавить столько же на те же самые позиции, но после удаления кнопок, визуально они стоят где надо, но их индекс в qgridlayout стал выше
Например у меня поле было из кнопок 4 на 4, индекс левой верхней = 0, после удаления и добавления новых кнопок её индекс стал 4/8/хуй пойми какой. Уже второй день ебусь и не могу понять что не так(дебагером прошёлся, удаляю все кнопки)
Кто-нибудь с подобным сталкивался?
for i in range(len(list)):
if list[i + 1] == 'одна штука':
list[-1] = 'другая штука'
Ты это имеешь в виду?
бля, опять проебался.
Вот:
for i in range(len(list)):
if list[i+1] == 'какая-то хуйня' and list[i-1] == 'какая-то хуйня':
list = 'такая-то хуйня'
Я не называю списки listами, естественно. У меня там вообще матрица.
>Как без лишних if по достижению конца списка перейти в начало списка?
lst[(idx+n) % len(lst)]
Можешь ещё обратить внимание на itertools.cycle, но это не совсем подходит для твоей задачи присвоения значений.
Теоретически, если тебе нужно только одина раз зациклить, можно схитрить и обходить в обратном порядке, тогда отрицательные индексы как раз зациклят https://repl.it/repls/SpicyAdvancedRectangle
>>199294
на последнем элементе i+1 же эксепшн вызовет, нужно range(len(lst)-1).
if n == 0:
return 1
return add(n - 1) + add(n - 1)
анонуши, обьясните принцип работы этой функции плес. Нихуя не могу понять как он возвращает значение, почему тут не получается бесконечное количество операций?
>вот конкретно тут, что он возвращает?
add(n-2)2 + add(n-2)2"
Почитай про рекурсию, добавь print(n) в начало функции и вызови её, посмотри, что происходит.
смотрел. Я правильно понимаю, что в итоге функция возвращает количество сложенных единиц от >in f == 0: return 1 ?
560x420, 4:52
Вот есть к меня мутабельный класс.
Внезапно, по-дефолту он является хешируемым, наследует object.__hash__, который насколько я понимаю что-то вроде return hash(id(self)).
Это нормально что мутабельный класс является хешируемым и может например в качестве ключей dict'а использоваться?
Аноны есть ли у кого нормальная инструкция по деплою FLASK +nginx +uwsgi максимально простая?!?
>количество сложенных единиц от >in f == 0: return 1 ?
Нихуя не понял, что это значит, но в развёрнутом виде да, там будет какое-то количество "1+1"-ов.
add(3) = add(2) + add(2)
add(2) = add(1) + add(1)
add(1) = add(0) + add(0)
add(0) = 1
=>
add(3) = add(2) + add(2) = (add(1) + add(1)) + (add(1) + add(1)) = ((add(0) + add(0)) + (add(0) + add(0))) + ((add(0) + add(0)) + (add(0) + add(0))) = ((1 + 1) + (1 + 1)) + ((1 + 1) + (1 + 1)) = 8.
ну да. это и имел ввиду. Получается что ((1 + 1) + (1 + 1)) + ((1 + 1) + (1 + 1)) исходят от >in f == 0: return 1. вот я до этого не мог допереть. Спасибо. анон
только начал учить пайтон, еще мозги не мыслят как надо. До этого был гуманитарий до мозга костей.
>>1199814 (OP)
>>1199814 (OP)
>>1199814 (OP)
>>1199814 (OP)
>>1199814 (OP)
есть ли какие предписания, сколько методов, функций следует объединять в один класс?
>>1199534 (OP)
итерируй по два или сколько тебе нужно элемента за раз
не изменяй список в цикле, а создавай новый
не вижу связи... поставь питон в C:\PYTHON и пакеты будут ставиться туда... не в %USERPROFILE% дело как мне кажется
У меня конкретно ошибку из-за папки с названием на кириллице выдаёт, да и на форуме говорят, что в этом у многих проблема и этим вызвана эта ошибка.
Всё, переустановил на жёсткий диск, отлично работает.
Это копия, сохраненная 26 июля 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.