• Как найти и изменить текст в pdf файле?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Как найти и изменить текст в pdf файле?

    В общем случае никак. PDF может содержать просто картинки с отсканированными страницами, может содержать векторные рисуночки букв вместо струткурного текста, может содержать просто набор кривых, составляющих буквы, причем они не будут даже сгруппированы в отдельные символы или строки.
    Если вам повезло и конкретно ваши прайсы подготовлены так, что внутри сохранилась информация с текстом для текстового поиска, то это не значит, что заменив этот текст в бинарном файле у вас что-то изменится. или хотя бы не поломается в отображении документа. А ещё pdf может быть защищен, зашифрован, подписан ЭЦП, обфусцирован для извлечения данных...

    Единственное более-менее работающее решение - это распознать текст любым инструментом OCR, отобразить его на виртуальном холсте и нарисовать сверху заплатки с новым текстом, если новый текст вообще поместится поверх старого.
    Потом снова печатаем холст в PDF. Это страшный геморрой и лучге брать исходный документ и менть текст в нём, как вам уже предложили в комментариях.

    Проще сверстать документ заново, чем, в общем случае, редактировать что-то в PDF.
    Ответ написан
    Комментировать
  • Почему каталог с React-приложением не загружается на GitHub?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Читать статьи как работать с GIT. Миллион инструкций в сети, ищется и гуглится на раз.
    Приходить сюда с конкретными проблемами, а не "ничего не работает все сламалось, памагити!!!111".
    Использовать систему контроля версий не только для публикаций, но и в работе, потому что если вы не используете, то это - сливай воду и вон из профессии. Даже если работаете один над проектом. Система контроля версий - это не только способ коллаборативной работы, но и многоступенчатый инкрементальный бэкап проекта, способ отслеживания и упорядочивания изменений, способ формирования дисциплины работы с кодом.
    Ответ написан
  • Как преобразовать команду из консоли в yaml файл для docker?

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

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

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

    Если у вас с питоном беда, то можете всё это проделать в экселе.
    Вам нужно выгрузить листинг каталога в файл, вставить его в столбец экселя, формулами обработать и в отдельном столбце получить команду для переименовывания. Потом этот столбец копируете и сохарняете его текст как *.bat-файл, или shell, если другая операционка.

    Если у вас есть мультикурсорный редактор типа сублайма, Атома, Notepad++, или любой IDE, то вы можно в списке файлов размножить курсоры на каждую строку и проделать все необходимые операции над всеми строками сразу. Получите на выходе тоже пакетный файл для переименования.

    Ещё можно поставить FarManager, сейчас он стал вообще кроссплатформенным. Там можно записываь клавиатурные макросы. Делаете одно переименоание под запись, а потом вешаете записанны ймакрос на клавишу и обрабатываете все файлы быстроенько.

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

    Выбирайте решение на любой вкус.

    Ну ок, на питоне вам стоит каждое имя файла сплитнуть по символу "-", а потом, перебрав все элементы получившегося списка, дополнить нулями те, что состят только из цифр (метод isdigit).
    У строки есть метод zfill, который умеет это делать до нужной длины слева.
    Ответ написан
    Комментировать
  • Как заставить программу скопировать ссылку на объявление?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы в список links ничего не помещаете, поэтому там пусто. Его длина нулевая. Всё правильно.
    Это потому что либо soup.find_all('a', href=True) выдает пустой результат, либо
    link['href'].startswith('https://www.facebook.com/marketplace/item/')
    никогда истиным не бывает.
    Добавляте дополнительные отладочные принты и выясняйте что именно идет не так.
    Ответ написан
  • Как добавить к основному продукту вспомогательный в django rest framework?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А в чем проблема добавлять в заказ кофе отдельно, а топинг отдельно?
    На самом деле не зватает данных о том. как вы собираетесь это всё запрягать.
    Лучше сохранить плоскую простую структуру, а топинги просто указывать сразу после кофе.
    В одном заказе может быть несколько кофе с разными топингами.
    Вы можете сделать вместо ManyToMany модель произведения Заказе на Продукт в ручную:
    ПродуктВЗаказе(Заказ, Продукт, порядковый_индекс).

    Но вот я вижу у вас в Продукте какой-то volume. Это что значит, капучино у вас представлено в таблице продуктов всеми доступными объёмами? А топинги тоже определены объёмами?
    Если так, то Продукт у вас абстрактен, а в заказе он представлен таблицей ПродуктВЗаказе.

    Благодаря упорядоченности этой таблицы можно условиться, что если Продукт дополнительный, то он должен идти после продукта. в который его добавляют. Это чтобы по Заказу можно было однозначно приготовить кофе и не перепутать топинги.
    Минусов такого подхода несколько:
    - нужны методы перестановки элементов заказа, чтобы, например, заменить топинг к первому кофе из нескольких указанных в заказе.
    - если дополнитеьный продукт вроде топинга может оказаться и основным продуктом, то флаг его дополнительности придётся указывать в модели РодуктыВЗаказе. К примеру, можно заказать лимон и текилу по отдельности, а можно лимон в качестве добавки в чай. В этом случае нельзя указать в Продукте "Лимон" атрибут "дополнительный", ну или придется заводить отдельные Продукты для одного и того же лимона.

    Я бы не парился с признаком "дополнительности" у Продуктов, а вынес это флаг в таблицу ПродуктыВЗаказе и сделал бы методы перестановки элементов.
    Тогда заказ бы у меня был плоский, но выглядел как-то так:
    Капучино 300мл Арабика
    + Карамель
    + Корица
    + Шоколад
    Эспрессо 400мл Арабика
    + Коньяк

    Тогда, если девушка скажет: "ой. а можно мне ещё мятный сироп туда?"
    Бариста в приложении добавит "+ Мятный сироп" и перетащит его над Эсрессо.

    Плюсик будет определяться флагом в модели ПродуктыВЗаказе, а позиция целочисленным индексом в этой модели.
    Индексы можно проставлять с шагом, например, в 1000, а при перестановке тогда просто апдейтить только переставляемую запись устанавливая индекс посерединке между любыми двумя соседними.
    Ответ написан
    2 комментария
  • Как работает кошелек https://t.me/CryptoBot?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Я так понял авторы кошелька честно-честно только подержат ваш денежки у себя для вашего же удобства. Вы их переведете сами на их кошелёчек, а они помогут удобненько ими пользоваться. Нет, конечно же они не исчезнут поработав немного на репутацию пока не наберется ощутимая сумма. Какой в этом интерес? =) Ну вы понимаете...
    Ответ написан
    21 комментарий
  • Таблица умножения, python. Ошибка?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Так вот же вы используете не звёздочку, а крестик:
    print ('{} x {} = {}'.format( i, j, i*j), end='\t' + '\n')

    А табуляцию перед абзацем вы для чего добавляете? Это тоже может повлиять на корректность результата.
    Ответ написан
  • Как исправить ошибку в программе на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    А вы пробовали читать текст ошибки?
    Вот смотрите, тут указано в какой строке и конкретно где в этой строке ошибка. А ниже написано в чем заключается ошибка.
    File "C:\Users\Никита\Documents\#программа для расчёта оценок.py", line 50, in
    a = ProgrammForTest()
    ^^^^^^^^^^^^^^^^^
    TypeError: ProgrammForTest.__init__() missing 4 required positional arguments: 'a', 'b', 'c', and 'ball'

    Вот вонкретное пояснение: "missing 4 required positional arguments: 'a', 'b', 'c', and 'ball'"

    Мне кажется вам следует взять любую книгу по питону с нуля и пееречитать ее внимательно.

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В питоне есть стандартный модуль под названием configparser.
    По нему всё хорошо расписано с примерами в документации.
    Вместо того, чтобы городить какие-то городушки с датаклассами. можно просто прочитать все необходимые параметры из обычного конфигурационного файла.
    Вот есть статья на Хабре с вариантами на любой вкус: https://habr.com/ru/articles/485236/
    Ищется за три секунды, не понимаю почему вы не поискали прежде чем спрашивать.
    Ответ написан
    Комментировать
  • Проблемы с подключением двух разных ПК. Как сделать правильно?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Это внешний IP ертелекома в екатеринбурге. Автор вопроса, похоже, за NAT и пытается по внешнему ip вот так сокетом пробиться через nat.
    Так не получится. Ну или у него белый адрес, но роутер не пробрасывает внешние коннекты на его комп.
    В общем, автору следовало бы указать сетевой адрес локального интерфейса при подключении.
    ipconfig что показывает? (ifconfig для линукс)
    Ответ написан
    5 комментариев
  • Как объединить файл python и презентацию pptx?

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

    Объясните своему заказчику, что если его благополучие и бизнес зависят от того, насколько быстро распиратится информация, которую он продает в своей презентации, то его песенка спета. Пусть придумывает другой способ монетизации.

    Огромное количество курсов и практикумов вынуждены тратить немасштабируемые человеческие ресурсы на живые лекции и трансляции, чтобы снизить скорость утечки материалов и понизить стоимость утёкших материалов без пояснений и инетрактива со стороны препода\лектора\организаторов.
    Если кому-то бдет полезен контент вашей презентации, то он будет похищен мгновенно, а все ваши кустарные способы их защитить будут практически бесполезны и дороги. Вполне вероятно. что они окажутся многократно дороже в реализации, чем защиаемый контент. Это ы ничего с учетом возможного фактора масштабирования, но ввиду практически полной бесполезности такой защиты...
    Ответ написан
    Комментировать
  • Как ускорить метод users.get?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вся проблема у вас из-за того, что вы тут делаете много http-запросов к API. Это в любом случае будет не быстро.
    Вам нужно изучить API на предмет bulk-запросов, когда вы извлекаете сразу много записей одним http-запросом к API.
    На сколько я понимаю, друзей может быть очень много, а вы идёте в глубину на два яруса, что имеет квадратичную сложность. То есть если у всех в среднем 10 друзей, то вы сделаете по десять запросов на каждого из десяти дррузей, что очень долго - 100 запросов!

    Для начала вы можете кэшировать полученные от API данные, чтобы повторно не получать одни и те же, если есть общие друзья. Нужно найти bulk-методы в API и правильно их использовать (если они есть).

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Автор вопроса не предоставил необходимой информации для ответа на свой вопрос.
    Из постановки вопроса не ясна структура сети. Скорее всего ваш компьютер находится за NAT и снаружи не виден под указанным вами IP-адресом. Погуглите как работает NAT и как пробросить порт за его пределы.
    Насколько я понял, автор вопроса через какой-то ресурс вроде https://whatismyipaddress.com выяснил свой ip-адрес и думает, что это внешний интерфейс его компьютера.

    Так не получится.

    Некоторые провайдеры дают белый IP-адрес при подключении через PPP. Но здесь, похоже не тот случай, ведь увтор вопроса обмолвился о локальном IP-адресе типа 172.x.x.x.

    Если подклчение происходит через роутер от провайдера и он предоставляет белый ip, то этот ip выделен вашему роутеру. Нужно читать что такое port forwarding, и с помощью него вам удастся захостить ваше веб-приложение.
    В случае с NAT я бы порекоменовал арендовать минимальную vds и хостить приложение там, либо пробросить через него порт по ssh на ваш домашний комп.
    Или гуглите читайте кучу статей как пробрасывать порты через нат, вот такую, например: https://habr.com/ru/post/279969/
    Ответ написан
  • Как можно решить эту задачу?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Этот ресурс не предназначен для того, чтобы решать задачи за вас.
    Судя по вашему описанию задачи вам такое рановато. Тем более без глубокого понимания питона лезть в задачу смысла нет.
    Скорее всего задача с какого-нибудь пентестерского челленджа.
    Могу дать несколько подсказок, как подступиться, но, повторюсь, вам эти подсказки скорее всего не помогут.

    В первой части кода где вычисляется x цикл собирает имена файлов в локальной файловой системе компьютера, на котором выполняется код. Видимо на той машине, на которую предназначалась атака в ФС есть каталог /neroot какими-то данными.

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

    Чтобы распутать этот клубок надо разить код на части (этапы) и анализировать их отдельно подавая на вход правдоподобные данные.

    Там альше видно код. который вычитывает содержимое файлов каталога /neroot и складывает это содержимое в словарь.
    Весь вот этот запутанный код со здвигами призван зашифровать адрес сайта, куда отправляется json с данными из тех файлов.
    Вот этот код расшифровки вы можете выковырять и запустить отдельно, чтобы расшифровать.
    Но без знания языка у вас не получится.
    Ответ написан
    Комментировать
  • Как сделать аудиопроигрыватель с возможностью чтения флешек?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Что-то с такими навыками поиска инфы в сети у вас вряд ли получится достичь задуманного.
    Я вот с микроконтроллерами дело имел только лет двадцать назад в ВУЗе на лабораторных работах, и то нагуглил за пол минуты модуль вроде такого: https://aliexpress.ru/item/1005003021933505.html?s...

    Только вот смысла в такой самоделке я не вижу. Сейчас продается масса дешевых (дешевле отдельных компонентов в розницу) прикольных девайсов, причем даже в локальных магазинах вроде DNS. Там и звук у них хороший (на мой непритязательный вкус), и вид, и дизайн, и питание гибкое от батареек до встроенныз аккумуляторов, тайп-си кабеля, прямого провода от солнечной батареи и чего угодно.

    Удвляюсь, что в такие приборчики массово вайфая на борт не добавляют, веб-интерфейса и вохможностей интернет-радио. Хотя наверняка уже есть готовые таке приборы.
    Смотрели проект Ka-радио? Наверняка кто-то прикручивал к проекту и USB-host
    Ответ написан
    3 комментария
  • Как работает модель text-to-speech?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Это очень наивный вариант TTS.
    Во-первых, не буквы, а звуки. Нужно вспомнить фонетический разбор, которому учили в школе.
    Каждый язык имеет свою специфику. Есть огромное количество нюансов, исключений, особенностей и тонких настроек.
    Если вы планируете на полном серьёзе сделать свой движок TTS с сегодняшним уровнем знаний, то у вас не получится. Просто отсавьте эту проблему и возьмите готовый TTS движок, например Festival. Там же и код глянуть можете как это делается.
    Ответ написан
    3 комментария
  • Как разобрать mp3 файл?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Это слишком широкий вопрос, а вам следует разбить задачу на несколько более простых.
    Вот гуглите отдельно:
    - конвертация mp3 в midi - https://www.google.com/search?q=mp3+%D0%B2+midi&oq...
    - конвертация midi в нотные блоки - https://www.google.com/search?q=midi+to+minecraft+...

    Судя по постановке вопроса ваша задача еще не скоро будет вам подсилу. Учитесь декомпозировать и искать информацию. Без этих навыков вы ничего не добьётесь.
    Ответ написан
    Комментировать
  • Почему методы выводят None?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Прочитайте документацию по этим методам. Именно в документацию нужно идти прежде чем задавать вопросы на подобных ресурсах.
    Вас удивляет, что эти методы не годятся для "чейнинга", поскольку не возвращают нистанс своего объекта? Думаю не это.
    Эти методы модифицируют объект на месте (inplace), а не возвращают новый. После вызова метода сортировки список стал отсортированным. А одноименная функция формирует новый список, куда в отсортированном порядке копирует содержимое оригинального
    Ответ написан
    1 комментарий
  • Какие преимущества у docker?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Основное, что дает докер - это изоляцию частей вашей системы друг от друга. За счет этого гораздо проще всё настраивать.
    - БД настраивается в отдельном докер-контейнере. В большинстве случаев вы используете стандартный образ и подаете ему только настройки.
    - nginx настраивается в отдельном контейнере вместе с certbot'ом, который будет обновлять вам сертификат ssl.
    - бэкенд поднимаетя в отдельном контейнере на стандартном порту (и порт не будет конфликтовать с другими бэкендами в других контейнерах на том же порту.
    - другие какие-то бэкенды и админки будут рядом сидеть в отдельны контейнерах и не будут конфликтовать друг с другом версиями библиотек. интерпретаторов и чего угодно
    - компиляция и сборка тоже делаются в контейнере, который не запускается в прод, но обеспечивает иоляцию этого процесса так, что другие разработчики легко приступят к работе без долгой и уникальной настройки своего рабочего места.

    Весь набор нужных контейнеров для проекта конфигурируется docker-compose файлом и в большинстве случаев при правильной настойке чтобы поднять дев-стенд или продакшн вам достаточно будет склонировать репу на комп и скомандывать docker-compose up.

    Про слои и переиспольование почитайте в документации к докеру. Докер-образы наследуются накладывая свои изменения слоями. Это экономит место на диске и упрощает всю систему минимизируя число возможных состояний.
    Вся файловая система контейнера не примонтированная извне будет стёрта и забыта при перезапуске контейнера. Так можно быть уверенным, что ваш бэкенд не оставляет лишних неучтенных побочных эффектив. Это упрошает отладку и поиск проблем.
    Ответ написан
    2 комментария