• Как вывести имя массива?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вот так:
    print(*[k for k,v in vars().items() if v == ['Яблоко', 'Груша', 'Арбуз']])

    Но думается мне вы не этого хотели.
    Просто начните с книжки, а не методом проб и ошибок. Сэкономите массу времени.
    Ответ написан
    Комментировать
  • Как игнорировать .gitignore?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    в .gitignore перечислены шаблоны имён файлов, которые гит будет игнорировать и не будет предлагать добавить в репозиторий, однако если файл уже есть в репозитрии и при этом также его имя соответствует одной из строчек файла .gitignore, то гит будет с ним работать как и со всеми прочими.

    Ваш вопрос сформулирован очень непрозрачно. В репозитории скорее всего вообще нет файлов, которые перечислены в gitignore, но если их добавили вручную, или они попали в рпозиторий до добавления в gitignore, то вы получите их локально наравне со всеми остальными файлами в репозитории при обычном клонировани.

    Так что независимо от того, что у вас написано в gitignore при клонировании вы получите абсолютно все файлы, что ииеются в репозитории, а тех, что там не имеются, вы, очевидно, не получите.
    Ответ написан
  • Как работать с файлом SQL объемом 20 ГБ?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы выбрали плохой путь по ряду причин.
    Во-первых, вы пытаетесь вычитать весь 20гб файл в оперативную память. Это будет долго, отожрёт кучу свопа и не факт. что завршится успешно.
    Во-вторых, вы пытаетесь запустить весь SQL за один раз - это вы правильно поняли.ч то проблематично.
    Ну а в-третьих...
    В общем, следует глазами посмотреть в SQL и понять что там. Если там дамп БД, то сперва идут стейтменты для содания таблиц, индексов, хранимок, а потом уже операции вставки в эти таблицы.
    Ваш файл называется "часть 3", так что, возможно, часть нужных стейтментов для создания структур просто оказались в других фвйлах.
    Обычно кусок SQL, который создаст все таблицы, не так уж и велик по размеру. Можно открыть файлы с дампом текстовым редактором и вытащить оттуда куски SQL из начала с созданием структуры. Положить эти кусуи в отдельный файл. Иногда в SQL-файле с дампом лежит и команда создания базы, посмотрите внимательно.

    Когда у вас операции вставки данных в БД в отдельном огромном файле, всё тсановится чуточку проще.
    Если у вас задача одноразовая и нужно просто найти один номер и больше ничего, то можно просто воспользоваться командой grep на SQL файле. Она поищет нужный номер и покажет строчки, в которой он встретился. Параметры командной строки могут настроить выхлоп так, чтобы показывались несколько строчек. Это, возможно пригодится, если отдельные стейтменты со вставками занимают по много строк. Так можно быстро найти нужные данные не возясь с поднятием БД.

    Если задача более-менее систематическая, то, конечно, лучше выполнить SQL и занести все данные в БД. Для этого имеет смысл воспользоваться стандартными утилитами, а не городить такой вот велосипед с квадратными колёсами.
    Если описанные действия нужно проделывать в рамках какого-то более широкого автоматизированного процесса, а не одноразово руками, то можно тулзы для БД запускать и из питона, просто системным вызовом консольной команды.
    Ответ написан
    1 комментарий
  • Формирование произвольных URL?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Джанго также отлично позволяет обрабатывать много урлов одним view. Можно просто зароутить все после слеша и парсить хвост урла как адресную цепочку.

    Как правило в таких способах представления адреса нужно стараться избегать отдельных запросов к БД по стране, городу, улице, дому. В идеале нужно доставать всю необходимую информацию за один запрос.
    Тут становится важным как устроена ваша БД. Обычно адресные элементы индентифицируются не по названию, ведь название, в данном случае, - это плохой идентификатор. Он с одной стороны громоздкий (Санкт-Петербург), а, с другой, есть проблемы с уникальностью для мелких населенных пунктов. А ещё топонимы чаще всего интенационализируются, то есть на разных языках они пишутся по-разному. Кроме того, адреса в рахных странах могут записываться по-разному, встречаются совершенно разные уровни административного деления, разные схемы подчинения административных единиц.
    К примеру, в РФ есть области (автономные области, края), районы, сёла, посёлки городского типа, микрорайоны, да и дома - это не рпосто нумерация, там есть дроби, литеры, корпуса...
    Каждй раз когда я вижу, что кто-то пытается такую сложныю предметную область формализовать в виде элементов URL, я срашиваю, а зачем это вообще нужно? URL - это не самая удобная штука для непосредственного ввода человеком. Особенно много вопросов вызовут топонимы с пробелами, дефисами, сокрашениями (С. Петербург, Питер). Для чего всё это? Не проще ли воспользоваться идентификатором адресной единицы от одного из адресных справочников вроде OKATO? Понятно что в разных странах эти справочники разные, но тут в любом случае надо делать разную логику.
    Я бы не заморачивался излишней читаемостью урлов в таком вот случае, а просто добавил бы префикс, однозначно указывающий на "домен" адресного пространства, и следом бы указывал идентификатор внутри этого адресного пространства. Вот смотрите сколько их бывает: https://classifikators.ru
    К примеру:
    /okato/70228870004
    Ответ написан
    Комментировать
  • Задача на геометрию. Как быстро найти подходящую выборку элементов из матрицы?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Зачем искать расстановку, если этого не требуется по условию задачи?
    Представим, что мы знаем самую оптимальную расстановку жуков на окружности.
    Нужно найти время, когда все жуки займут свое место, и это время будет не ранее, чем последний жук займёт свое место, то есть жук, которому идти самый длинный путь.
    Таких жуков может быть несколько. В одном из частных случаев все жуки в 0.0 и им всем идти R секунд до своего места, а займут они свое место одновременно. В этом случае не важно какого жука мы выберем последним.

    Итак, у нас есть жук, которому ползти максимальное время до своей точки на круге. Для каждого жука можно найти самую дальнюю точку окружности. Последним жуком будет (скорее всего) тот, который ближе всего к своей самой дальней точке.
    На каждых 1\N радианах дуги окружности должна быть одна финальная точка.
    Нужно найти самую дальнюю дугу длиной R/N от всех жуков, а потом жука, который ближе всех к одному из краёв этой дуги. Остальные жуки уж точно доползут до своих точек быстрее этого.
    Ответ написан
  • Как работает перенаправление вывода скрипта python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Или вызывайте вот так:
    print(subprocess.getoutput('./1.py'))
    Так вы дождётесь полного выхлопа.
    Но если выхлопа много, то лучше запускать иначе, чтобы получить выходной пайп и вычитывая его в цикле слать всё на stdout __main__

    UPD: Дополню ответ, а то часть оказалась в комментариях.

    Такое происходит потом, что при перенаправлении выхлопа в файл происходит буфферизация. Накопительный буффер сбрасывается в файловую систему по факту своего заполнения или принудительно (по команде flush или по факту завершения процесса).

    При выхлопе, направленном в терминал, буфферизации нет и всё, что выводится, попадает в терминал сразу.
    Но если бы каждый байт писался в файловую систему без буффера, то это быо бы чертовски медленно и заставляло бы постоянно дёргаться картеку (реальную или виртуальную) лочного девайса, на котором у нас файловая система.
    Так и получается, что
    - сперва в stdout материнского процесса попадает некий текст,
    - потом запускаеется дочений процесс и что-то пишет в свой stdout,
    - потом дочерний процесс закрывается и сбрасывает накопившийся буффер, который перенаправляется по цепочке в выходной файл,
    - потом закрывается материнский процесс и весь его недозаполненный буфер тоже сбрасывается в файл.
    Ответ написан
    2 комментария
  • Как преобразовать список в словари?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Тут не поощряется публикация заданий без попытки самостоятельного решения.
    В ответе тоже не буду давать вам готового решения, поскольку это "медвежья услуга".

    Могу дать подсказку как решать вашу задачу.
    Во-первых, следует отметить, что во втором, заблокированном вашем вопросе, формат входных данных отличается от озвученного здесь. Нужно тщательнее и аккуратнее приводить примеры.
    Любую относительно сложную задачу нужно разбивать на блее простые подзадачи и решать их отдельно и изолированнно.

    В данном случае входной список вам следует сначала разделить на набор отдельных списков, где в каждом первым элементом будет ваш идентификатор, а дальше список ключей и значений. Это можно оформить отдельной функцией. В том, втором вопросе было видно, что разделить входную последовательность можно, например, по значению 'ID'. В примерах, приведённых здесь, нет такихэлементов, поэтому тут придётся ориентироваться на тип или четность...
    Когда у вас будет последовательность списков, первый элемент - ключ всего списка, легко отделить слайсом, а весь хвост можно легко превратить в пары ключ-значение вот таким вот способом:
    In [1]: lst=[1,2,3,4,5,6]
    
    In [2]: dict(zip(itr:=iter(lst), itr))
    Out[2]: {1: 2, 3: 4, 5: 6}


    Ну а если вы не сообразите, как увязать воедино все приведенные мной тут примеры, то вам еще рано решать такие задачи, нужно сделать пару шагов назад и осваивать базовые основы языка.
    Ответ написан
    Комментировать
  • Альтернатива PyCharm?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    У вас 3.11 питон. Гляньте есть ли совместмость у ваших библиотек с этой версией. Возможно они еще не сделали релиз под 3.11.
    Ответ написан
    3 комментария
  • В названии файла обратный слеш. Как удалить такой файл?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Загрузитесь с LiveCD или загрузочной флешки с Ubuntu, примонтируйте раздел и удалите.
    Ответ написан
    Комментировать
  • Как реализовать онлайн трансляцию экрана на Python?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы слишком широко вопрос поставили. Почему сразу не спросили как стать богатым и знаменитым? Ну и чтобы вам ещё и денег дали в доказательство работоспособности ответа.

    К предыдущему ответу по существу могу вот нагугленный с первой попытки вопрос со стэк-оверфлоу предложить: https://stackoverflow.com/questions/35097837/captu...

    Однако, судя по постановке вопроса, не думаю, что вы сможете собрать всё это в работоспособную кучу.
    Ответ написан
    1 комментарий
  • Должен ли программист выполнять роль девопса на сервере заказчика?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Нужно поставлять свои решения с развертыванием в докере. Компоуз файл ему отдаете и говорите. что дальше не ваша забота. Может он на QNX каком-нибудь или OS/2 решил бы все завести. Это его проблемы.
    Ну а то, что вы не согласовали заранее требования к платформе и окружению, не оговорили в каком виже будет поставка и какие вы готовы обеспечить работы по развертыванию - это теперь ваши обоюдные роблемы.
    Если вы уже отдали ему исходники, то он может попытаться свалить с ними под предлогом, что вы ничего не развернули на его железе.
    То. что не оговорено в договоре, будет геморроем. Ну а там уж только меряться кому геморрой длиннее покажется.
    Ответ написан
    Комментировать
  • Для каких проектов и задач в backend предпочтительнее Python с фреймворком Django?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы немного путаете причины и следствия.
    Если ML и аналитику делают чаще всего н апитоне, это не значит, что на питоне делают чаще всего аналитику и ML. Просто для аналитики и ML в питоне очень много "батареек", он в этом направлении лидер. Но основное применение питона - это бэкенд. Джанго действительно очень популярна, и его только недавно стал перегонять FastAPI соблазняя своей асинхронностью.
    Прелесть и преимущество Джанги в его самодостаточности для многих направлений применения. Там и довольно элегантный ORM в коробке, и шаблонизатор, и, что часто очень важно, простя в использовании и мощная админка с системой атворизации и управления правами. Практически с голой джангой и за пол часика можно быстро набросать модель данных и развернуть MVP, причем совсем не придётся тратить время ни на авторизацию, ни на организацию всяких там систем миграций, таск-менеджмента, модульного согласования разных фичей и т.д..
    А если учесть, что гитхаб ломится от готовых блогов, магазинов, чатов, виджетов, систем работы с комментариями в виде приложений для джанго, а эти приложения егко собираются в один проект и не толкаются друг с другом локтями при этом, то тут вполне можно понять почему Джанго так популярен.
    Питон в целом и Джанго в частности дают скорость разработки, которой позавидуют любые другие языки и фреймворки. При этом язык довольно свежий, современный и удобный.

    Однако меня смущает ваша постановка вопроса. Такое ощущение, что вы себе стек подбираете по озвученным критериям. Эдак могу посоветовать идти в перловики. На перле тонны легаси, в котором сейчас хрен кто ладу даёт, все бегут на что-то покомфортнее, а зарплаты у перловиков из-за вакуума на рынке не маленькая. Ну там, где это вижу я. Да, будущего у языка нет, но здесь и сейчас можно постричь бабла и подоминировать на своей нещаменимости=).
    Java - это жирный энтерпрайз, там всегда были и будут деньги. Полагаю крупные компании не сильно боятся обучать себе джунов, потому что эти джуны не улизнут в стартапы и будут залочены на корпоративный сегмент.
    Почему меня сутил ваш подход. Дело в том, что разных направлений развития много и в каждом можно преуспеть, но преуспеть в любом направлении сложнее, если вы выбрали его не по "зову сердца", а по меркантильным соображениям и требованиям рынка. У вас может просто не хватить мотивации, чтобы добиться нужного уровня профессионализма для востребованности в выбранном сегменте.
    Ответ написан
    Комментировать
  • Как определить коллизию квадратов?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Алгоритмов тут за вас никто придумывать не будет. Этот ресурс не для этого.
    Учитесь решать такие задачи начиная с более простых.
    Двухмерный случай с квадратами можно упростить понизив размерность задачи.
    Представьте, что у вас не квадраты, а отрезки и не на плоскости, а на оси.
    Нужно сформулировать булево выражение, которое будет истинно только в случае наложения отрезков (хотя бы частичного).
    Вам уже предлагали в комментариях попробовать представить квадраты не размерами, а координатами границ. Если у вас возникнут трудности и с вычислением координат правых нижних углов, то у меня для вас плохие новости...
    Попробуйте решить задачу для отрезков на оси, а потом подумать как расширить её для квадратов на плоскости.
    Если на этом этапе ещё не очевидно решение, то начинать следует с более простого. Хотя, казалось бы, куда уж проще.
    Ответ написан
    Комментировать
  • Почему скрипт не видит группу data?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Потому что вы два раза пытаетесь зачем-то спарсить http-ответ как JSON. Очевидно в Json один ответ.
    Вы ришли в магазин, запросили коробку конфет, вскрыли, получили список конфет и выкинули вместе с коробкой и конфетами.
    Потом снова делаете двидение руками, будто берете с прилавка коробку конфет (но ее там нет же, вы только одну запросили у продавца), лезете в воображаемую коробку рукой и не находите там конфету.
    Странно, правда?

    Если бы вы не нарушалиправило и не постили код в виде скриншотов, то я бы вам процитировал ваши ошибки и, наверно даже, написал бы как равильно делать.
    Но вы нарушаете правила.
    Ответ написан
    3 комментария
  • Есть ли в python библиотеки для создания графики в стиле MS DOS?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    А в чем, собственно, у вас с этим проблема? Что особенного в этой графике? Пиксели крупные, ну так и вы нарисуйте пиксели крупные. Можно даже графический режим такой включить, но смысла мало, можно просто рисовать пиксели прямоугольниками.
    Я понимаю речь бы шла о текстовом режиме, но тут-то что такого MS-DOS'овского?
    PyGame и в путь.
    Ответ написан
    Комментировать
  • Почему csv writer не записывает все итерации, хотя должен?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Почему csv iterator не записывает все, хотя должен?

    Нет, не должен. Итератор не должен ничего записывать, он интератор. Итератор итерирует. Всё.

    Вот вы пришли с вопросом, но по какой-то причине не включили в него самое важное, то по чему можно определить причину такого повеения вашей программы.

    Во-первых, вы не привели примера данных. Если что-то идёт не так, как ожидается, ВСЕГДА нужно приводить два набора данных: тот, который работает как ожидается и тот, который как ожидается не работает. При этом не обязательно приводить полные наборы данных, ведь их может оказаться очень много. Всегда нужно стараться упростить непонятную ситуацию максимально, и в какой-то момен она станет понятной. Ну, то есть, возможных причин проблемы в рассмотрении станет достаточно мало, чтобы понять какая из них действительна.
    В данном случае нужно было убирать из CSV всё лишнее до тех пор, пока проблема сохраняется. Если убирать уже нечего, то останутся только проблемные записи и, возможно, посмотрев на них, вы сразу всё поймёте. Или поймёт тот, к кому вы пришли с вопросом.

    query = """variables_loaded[variables_iterator]['0']""" ##, так далее

    Во-вторых, у вас какой-то совершенно невалидный SQL-запрос. Он бессмысленный и неправильный. Вот это буквально текст, который запросом не является. Он даже не меняется от итерации к итерации, понимаете? Нам тут не ясно что вы имели в виду под "так далее", нам тут не ясно понимаете вы что такое SQL и что вот та строка им не является.

    При всех ваших ошибках в постановке вопроса нам тут уже не ясно, может быть у вас вообще нет работающего кода, который что-то записывет из CSV в БД, а то, что вы думаете он, якобы, запсывает, уже и так есть в БД, а вы просто этого не понимаете! Ну как не понимаете, что проблема может быть в SQL-запросе, поэтому его не приводите, как не понимаете, что проблема может быть в индексах и структуре БД, поэтому не приводите её структуры, как не понимаете, что проблема может быть в данных (они могут повторяься в разных строках CSV), а вы и не приводите все данные, и не говорите, что убедились, что они не повторяются!

    execute_query(connection, query)

    В-третьих, вы оставляете за скобками код выполнения SQL-запроса. Мы не знаем что это за код, может быть там вы тупо try-except'ом задавили все возможные ошибки и сами, фактически, отказались от того, чтобы БД вам объяснила в чем проблема. Может быть это вообе пустая функция внутри, или она неправильно обернута каким-нибудь декоратором, который ей не дает работать, а вы просто видите в БД одни и те же данные, и думаете. что они каждый раз туда заливаются вновь вот этим неработающим вообще кодом.

    Как нам судить обо всём этом букете гипотетических пробелм, если вы старательно все улики замели под ковер? Для чего вы это сделали?
    Ответ написан
    2 комментария
  • Запись, получение, хранение текстовой информации в Python, как реализовать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вам нужно многое понять и изучить прежде чем такая задача станет вам под силу. Судя по постановке вопроса вы очень далеки пока что от понимания основ алгоритмизации и структур данных.
    Конечно можно ставить любое уникальное значение любому объекту. Структура данных, которая это позволяет, называется map, а в питоне её реализует тип dict - это словарь, который ставит в соответствие любой объект любому уникальному другому объекту.
    Я уверен моего объяснения будет не достаточно вам. Почитайте любую книжку по питону с нуля, например, Марк Лутц пишет приемлемые.
    Ещё вам определенно понадобится какая-то БД, например sqlite, или что-то посерьёзнее, например postgres. Базы жанных - это тоже отдельный целый мир, но вам не нужно вних сильно углубляться, однако, одного вопроса, да и вообще вопросов будет недостаточно для нормального понимания.

    Я вам рекомендовал бы обратиться к фрилансерам за таким ботом, либо, если самому интересно, то читайте книжку по питону с нуля и там вам всё будет объяснено, что нужно для простого бота с вашей функциональностью.
    Ответ написан
    1 комментарий
  • Почему socket работает только в локальной сети? Как это исправить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Дело в том, что пока ваши устройства в одной подсети (им выдал адреса один DHCP сервер, это обычно ваш роутер), вы, указав локальный IP другого устройства в сокете, можете создать соединение.
    Но если устройства в разных локальных сетях, между которыми не настоен никакой роутинг, то устройства не смогут видеть друг друга. Их адреса будут в разных адресных пространствах.
    Это как звонить внутри отеля по внутреннему номеру телефона. Если один из абонентов окажется в другом отеле, то, даже зная его внутренний номер, вы из первого отеля не дозвонитесь ему напрямую по короткому номеру. Придётся пользоваться шлюзом. Вот шлюз - это NAT.
    Тут дальше аналогия уже поплывёт, если ещё глубже пытаться её применять.
    Прочитайте что такое NAT, что такое белый IP, динамический и статический IP, что такое port-forwarding, сетевая модель OSI, что такое маска подсети и как устроен IP-адрес, как происходит маршрутизация.
    Это слишком много инфы, чтобы рассказывать вам об этом в ответе на один вопрос. Вам нужно изучать это самостоятельно.
    Ответ написан
    3 комментария
  • Что делать, если неработает скрипт?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Павел Панов
    про эту строку from collections.abc import Mapping то я незнаю как и куда её нужно вставить

    Выглядит так, будто вы немного забегаете вперед в изучении языка.
    Прочитайте в любой книге (например Марка Лутца) что такое импорты, как они работают, что за стандартная библиотека collections и что за "Mapping", как он переместился внутри стандартной библиотеки между версиями питона.
    Также можно поискать историю версий питна и почитать когда произошел перенос Mapping, можно выбрать нужную версию интерпретатора, под которую написан ваш скрипт.
    Скорее всего это какой-нибудь 2.7. более точные выводы делать не по чем.
    Ответ написан