Ответы пользователя по тегу Python
  • Не могу передать строку в writerow, что не так?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вот это кошмар...
    Нагромождение каких-то ненужных приседаний и реверансов. Склажывается ощущение. что код писался вообще без понимания что и как работает.
    Тут проще пересчитать строки, которые не требовалось бы исправить: ноль таких строк.
    Вы бы привели хоть пример что у вас там в property подается. А-то на кофейной гуще гадать приходится какая из сотни ошибок-таки окончательно стедала неработоспособным код.

    Вот здесь вообще какая-то ерунда:
    for i in range(j, len(property)):
        k = j
        write_to_csv(property[k])
        k += 1
      j = len(property)

    Ладно, с отступами беда. Но зачем эти бессмысленные присвоения? Зачем этот бессмысленный цикл, если вы в нем обрабатываете один и тот же элемент много раз?
    Прекращайте уже такое писать. Смысла нет. Не ваше.

    Похоже (разводы гущи так подсказывают за неимением других данных) вы не понимаете что передаёте в эту свою функцию. Ситуацию бы прояснила публикаия содержимого переменной roperty
    Ответ написан
    3 комментария
  • Как записать .mp3 в JSON?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Хранить mp3 вполне логично в файлах в каталоге проекта.
    Если вы по какой-то причине не хотите хранить их россыпью в файловой системе, то можно собрать их в zip-файл без сжатия или в tar-архив. С ними можно работать не распаковывая, открыать и читать файлы внутри.
    Ещё есть встроенный модуль shelve - это персистентный key-value storage, который держит свои ключи и значения в одном файле. Доступны чтение и запись бинарных данных по ключу.
    Base64 приведёт к тому что объём данных увеличится примерно на четверть (на 25 процентов). Сериализация и десериализация больших файлов в текстовый json будет медленным и неэффективным.

    Опишите шире вашу задачу и вам предложат типовое ее решение.
    Ответ написан
  • Local port forwarding with host jumping Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Пробрасывайте последовательно через все туннели, кроме последнего, не 6000 порт, а 22. Пследний туннель пробросит целевой порт. Все коннекты, начиная со второго, должны быть на localhost, а порты ssh придется биндить на разные локальные порты.

    Смотрите, в CLI вы каждый раз на новой уделенной машине стартуете ssh. Технически можно делать это на одной машине, пришивая каждый раз 22 порт следующей удаленной машины на очередной локальный порт.

    Сам не пробовал. пока некогда.
    Ответ написан
  • Как реализовать регистронезависимый поиск в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Можно, как быстрое решение, продублировать данные в таблице, обработав их снаружи преобразованием в upper case.
    Тогда вам придётся подавать на вход в запросы уже преобразованные (подготовленные под формат индекса) данные.

    А вот здесь есть статья о том как добавить collate для русского регистронезависимого сравнения.
    Ответ написан
  • YouTube ошибка HTTP Error 429: Too Many Requests. Как исправить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Setaz213, никто вам не скажет сколько нужно ждать. Критерии детектирования недобросовестных пользователей не могут быть публичными, поскольку будучи опубликованными тут же будут использованы с целью настроить скрипты так, чтобы их не блокировали. Читайте в документации ограничения, которые накладывает API. Пользуйтесь прокси-листами, чтобы избежать окончательных блокировок при экспериментах.
    Если пользуетесь API, которым вам пользоваться не положено (то есть нет никакой документации и вообще никаких публичных ограничений), то изучайте с какими частотами дергает это API штатное ПО.
    Ответ написан
    Комментировать
  • Парсинг для чайников?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В институте парсинга информации при российской академии естественных наук (РАЕН) на кафедре текстов входящих сообщений на тертьем кусе есть дисциплина log-файлы. Там с третьей по сельмую лекции рассказывается как сие сделать. В учебном плане 17 семинаров, 8 лабораторных и 3 РГЗ.

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В срезах. Обе границы среза должны указываться абсолютно, а у вас индекс сбрасывается в 1 каждый раз. Такой изнаночный срез будет возвращать пустую строку.
    "abcdef"[3:2] -> ""
    Ответ написан
    2 комментария
  • Как отобразить автоподсказки при типе typing.List[typing.Union] для любого элемента списка?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы хотите странного.
    А именно, по какой то причине хотите сделать заведомо небезопасный код, и при этом хотите, чтобы IDE вам в этом помогал. Это я к чему: кейс, который вы здесь привели, - это антипаттерн; было бы странно ожидать такую специфическую обработку этой ситуации от IDE.

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

    Такие вещи нужно в коде разбирать явно.
    К примеру можно явно проверить переменную на принадлежность типу и IDE это учтёт делая подсказку:
    resp = c.response
    if isinstance(resp, A):
        resp.items[0].
    Ответ написан
  • Как автомоаически создавать страницы на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    postebayko, с текущим уровнем подготовки у вас просто не получится.
    Вы не знаете как устроен и работает сайт. И мы не знаем. А вы даже не подумали обмолвиться об этом в своём вопросе. То есть совсем ноль, понимаете?
    Начните с того, чтобы понять как устроен ваш сайт, на чем он написан (фреймворк, архитектура), есть ли на нём публичный API для необходимых вам действий.
    Если да, то вам крупно повезло. Читаете документацию к API и там наверняка будут примеры как делать и какие запросы, чтобы выполнить нужные вам действия. Делайте эти запросы из кода вашего бота.
    Ответ написан
    2 комментария
  • Как сделать, чтобы функция возвращала все элементы?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Потому что выход из функции происходит при первом попавшемся return'е с тем значением, которое первое туда попало.
    Учите матчасть. Читайте внимательно.
    Ответ написан
  • Считывание данных с веб камеры на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Не рассматривали устройства видео-захвата, чтобы подключались вместо монитора?
    Есть для всех интерфейсов: hdmi, dvi, vga.
    Бывают еще KVM устройства, которые подключаются в том числе вместо монитора и шарят с него картинку по ethernet

    Если распознавать нужно лишь несколько полей в области видимости камеры, то я бы посоветовал поискать в инете примеры захвата и обработки фото/видео с камеры с помощью opencv
    Камера на против монитора у вас, наверно будет стоять в оптимальном ракурсе, но даже если нет с помощью opencv вполне можно кадрировать, выровнять перспективу, очистить от бликов и сепарировать нужные участки изображения с камеры.
    Когда останутся поля, тем же opencv можно разбить их на символы и распознавать посимвольно. Хотя наверняка емть большое количество OCR решений в виде готовых 1библиотек.
    Ответ написан
  • Сервер для игры?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    flask, bottle...
    Возьмите любой микрофреймворк.
    Ответ написан
    1 комментарий
  • Python как решить проблему с оплатой?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    При выполнении float и sum - одинаковые значения, но они не равны, почему?

    Потому, что нельзя сравнивать float на строгое равенство без учета погрешности.
    Не каждое даже рациональное число можно представить в виде конечной десятичной или двоичной дроби. К примеру, 1/3 в десятичной - бесконечная периодическая дробь, а в троичной "0.1". Так не каждую конечную по числу знаков десятичную дробь можно представить конечной двоичной дробью. Выходит, что от порядка вычислений зависит потеря очень малых фракций числа, связанных с ограниченной точностью (числом битов) float.
    Нужно выбрать порог точности и сравнивать числа с его помощью:
    EPS = 1e-6
    abs(a - b) < EPS
    Ответ написан
    Комментировать
  • Как оптимизировать работу с файлами в Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы можете писать в CSV, прилично сэкономите на этом. CSV-файлы потом легко и быстро конкатенировать системными средствами командной строки. У вас винда, так что COPY, например.
    Самое неприятное, что может случиться - это проснуться на утро и увидеть монолитный гигантский файл (результат ночного бдения вашего скрипта), в котором что-то пошло не так где-то после первых 30-60%.

    Вообще главное - это вопрос одноразовая ли это задача. Если вы такой объём грузите, скажем, каждые пару дней, то, конечно, нужно юзать мультипроцессинг и настраиваеть нормальный пайплайн с автоматизацией и логами.
    Если речь об однократной кастомной обработке в рамках R&D, то не парьтесь, сделайте как проще.

    Пишите в CSV. Разбейте объём простым слайсом на несколько кусков и тупо стартуйте отдельными скриптами. Это сэкономит вам время на отладку мультипроцессинга, не надо городить очередей, тасков и прочего.

    К вашему коду есть вопросы:
    for row in range(1):
                ws.append(list(sheetname_set))

    Зачем здесь цикл?
    Почему не используете pathlib? Код станет надёжнее и лаконичнее.
    Почему не добавили статистику или просто логирование времени работы разных этапов вашего скрипта? Оптимизировать надо начиная с бутылочного горлышка. После первой бутылки задача может показаться не столь актуальной.

    Если речь об R&D и вы не знаете что дальше будете делать с данными, то объективно полезные вещи можно вытягивать и сохранять в своеобразные мета-файлы для последующей быстрой обработки. Это выгодно, если бутылочное горлышко застряло в экселе. Вытащите за один проход всё что может пригодиться в sqlite или хотя бы простые json-файлы по одному на каждый документ.
    Ответ написан
  • Как понять [:,: 0] в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Дополню немного ответ @sergey-gornostaev
    Это срез, вернее даже два.
    Дело в том, что в питоне объекты могут поддерживать протокол __getitem__, этот метод вызывается когда объект употребляется с квадратными скобками справа. Значение, указанное в квадратных скобках, будет передано в качестве аргумента этому методу.
    Тут есть два нюанса:
    В обычном выражении на питоне запятая означает что результат выражения - это кортеж. То. что вычислилось между запятыми, будет элементами кортежа:
    x=1,2,3
    Второй нюанс заключается в том, что в квадратных скобках питон поддерживает особый такой "синтаксический сахар" называемый срезами (slice).
    Вам действительно лучше почитать про срезы в книге. В общем у среза есть три аргумента и все необязательные. Если аргумента три то срез "под сахаром" выглядит так: 3:10:2 - "с третьего включительно по десятый исключительно с шагом 2".
    Срез 3::2 - означает "с третьего включительно до последнего включительно с шагом 2"
    Шаг можно опустить, по умолчанию он равен 1 и тогда не нужно второе двоеточие. Можно также не указывать и начало среза (типа сначала). Так : означает срез "от начала включительно до конца включительно с шагом 1".
    Такие срезы можно указать через запятую.
    Фактически фрейм - это трёхмерный массив. Первые два измерения - это высота и ширина, третье - это компоненты цвета.
    В вашем примере операцию проводят над всеми пикселями от верха и до низа, по всей ширине но в определённом канале.

    Правда, почитайте книгу. Такие вещи нужно осваивать последовательно, а не наскоком.
    Ответ написан
    2 комментария
  • Как провести конкатенацию в цикле for PYTHON?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    1. Форматируйте код с указанием языка программирования.
    2. Аккуртано работайте с отступами, иначе и себя запутаете и всех вокруг и работать будетнекорректно.
    3. Приводите полный код, ччтобы не приходилось гадать что там за пределами ваших обрезков. Где присваивается add_url? Может там пусто вообще всегда было и ничего не теряет.
    4. Читайте, блин, внимательно свой вопрос после написания! Вам что лень перечитать? Вот нам не лень ответить, а вам лень читать? Что за наглое неуважение к сообществу? Какая такая "add_ur"? Где она у вас в коде, блин?!
    5. Используйте форматные строки для сборки таких вещей по шаблону. В них сложнее ошибиться и накосячить.

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

    Замените
    'http://site.com/' + add_url + '?=' + str(i)
    на
    f'http://site.com/{add_url}?={i}'
    для третьего питона или для второго:
    'http://site.com/{add_url}?={i}'.format(i=i, add_url=add_url)


    Печатайте add_url прямо там, где поставляете и рядом печатайте результат подстановки. И вы увидите что у вас там не все гладко
    Ответ написан
    Комментировать
  • Как найти последнее общие значение во всем содержимом списка и получить номер позиции содержимого в списке?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    from itertools import groupby
    print(
        [
            (k, list(l))
            for k, l in
            groupby(
                enumerate(rows),
                key=lambda row: row[1][-1]
            )
        ]
    )
    Ответ написан
    2 комментария
  • Как получить unicode строку из строки hex?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Есть стандартный модуль bas64. В его составе есть функции b16encode и b16decode.
    Это правильный способ закодировать и раскодировать строку в hex и обратно.
    Если у вас это было сделано иначе, то нужно разбираться как было закодировано.
    Поэтому я и спросил откуда берется строка и просил привести пример побольше, чем то, что вы написали.
    Ответ написан
    Комментировать
  • Как правильно вывести текст из генерации?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Приложите голову к монитору и держите минут 30. Буду считывать исходники. Долго, согласен, но у вас мыслительный сигнал какой-то слабый.
    Ответ написан
    1 комментарий