Ответы пользователя по тегу Python
  • Как обработать список словарей?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Так а в чем проблема-то?
    data = .. ваша структура ...
    try:
        product_image = next(filter(lambda x: 'ProductImage' in x.keys(), data))
    except StopIteration:
        product_image = None
    
    if product_image:
        # работаем дальше с product_image


    если несколько значений может быть - то список изображений продуктов:
    product_image = list(filter(lambda x: 'ProductImage' in x.keys(), data))


    Есть небольшая подсказка, сделать это с помощу eval().

    че-то ерунду какую-то подсказали...
    Ответ написан
    2 комментария
  • Как записать данные в файл один раз?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    так - что-ли?
    ...
    with open('passwords.txt', 'w') as f:
        f.write(passwords)
    # конец файла

    там просто строка у вас возвращается
    Ответ написан
    Комментировать
  • Как спарсить текст из данной строчки?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Как-то так:
    import io
    import requests
    from lxml import etree
    
    for url in links:
        info = requests.get(url)
        tree = etree.parse(io.StringIO(info.text), etree.HTMLParser())
        rarity = tree.xpath('.//*[@id="largeiteminfo_item_type"]')[0].text
        print(rarity, url)

    P.S.: Внимательней читайте документацию чтобы ПОНИМАТЬ что вы делаете...
    Ответ написан
  • Разработка программы, с платной версией?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Поднимаете сервер, где реализуете полезную часть функционала посредством обращения к АПИ.
    Прикручиваете к программе какую-нибудь внешнюю платежку

    не знаю на сколько это законно, ну опустим это, не суть

    Вполне законно если клиента для оплаты будет перебрасывать на сайт банка и он там будет вводить все платежные реквизиты.

    На том же сервере фиксируете факт оплаты клиента и срок действия оплаты. Отдаете данные по АПИ если срок действия оплаты не истек.
    Вот собственно и все...
    Ответ написан
    3 комментария
  • Какую библиотеку использовать для парсинга большого количества страниц?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Вы бы определились - с чем именно проблемы могут возникнуть в вашем случае.
    Толку от быстрой библиотеки парсинга страницы не будет если сайт вам страницу полминуты отдавать будет...
    Толку от обычного подхода парсинга не будет, если страницу для получения данных на стороне броузера рендерить надо будет или какие-то действия выполнять.
    Толку от большого количества запросов в единицу времени не будет, - если сервер будет в бан отправлять за частые запросы.
    Ну и т.п.... Так что правильно вам говорят - беритесь уже хоть за что нибудь, да решайте проблемы по мере поступления.
    Ответ написан
    Комментировать
  • Как передать в icontains несколько значений django?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    services = Service.objects.filter(Q(title__icontains='мужская')&Q(title__icontains='стрижка'))
    Ответ написан
    Комментировать
  • Как дополнять json python, нужен именно код?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    у меня каждый раз ломается json

    если все делать правильно - ничего не сломается:
    import json
    data = '''{
        "id": {
            "login": "login",
            "password": "password"
        }
    }'''
    
    json_data = json.loads(data)
    json_data['1'] = {'login': 'log', 'password': 'pass'}
    
    print(json.dumps(json_data, indent=4))
    # {
    #     "id": {
    #         "login": "login",
    #         "password": "password"
    #     },
    #     "1": {
    #         "login": "log",
    #         "password": "pass"
    #     }
    # }
    Ответ написан
    2 комментария
  • Как сравнить два списка с частичным совпадением элементов?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Нечеткий поиск:
    from fuzzywuzzy import fuzz
    
    files = ['новая папка', 'games', 'install', 'фото', 'музыка']
    search = ['папка', 'фотки', 'музло']
    
    result = []
    
    for im in search:
        for fil in files:
            if fuzz.partial_ratio(im, fil) > 50:
                result.append(fil)
    
    print(result)
    # ['новая папка', 'фото', 'музыка']
    Ответ написан
    Комментировать
  • Почему не выходит спарсить блок?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    А кто вам внушил что парсинг динамических сайтов - это простое занятие?
    С помощью requests вы вытягиваете только шаблон по сути, в котором динамически с помощью javascript рендерятся нужные данные, которые к тому же еще и по вебсокету подтягиваются.
    Чтобы попытаться отрендерить и вытянуть эти данные - вам нужны инструменты вроде Selenium и более глубокие познания того что происходит в броузере
    Ответ написан
    1 комментарий
  • Как отсортировать массив из массивов по опрделенному элементу?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    arr = [[4, 3, 5], [3, 0, 7], [1, 9, 1], [2, 0, 7]]
    sorted(arr, key=lambda x:x[0])
    # [[1, 9, 1], [2, 0, 7], [3, 0, 7], [4, 3, 5]]
    Ответ написан
    Комментировать
  • Как отфильтровать список по заданному условию?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    langs = ['en-us', 'en-mc', 'en-gb', 'en-im', 'en-je', 'en-vg', 'en-ie', 'en-lu', 'sv-se', 'en-by', 'en-md', 'en-al', 'en-xk', 'en-me', 'fr-fr', 'fr-bl', 'fr-ch', 'es-es', 'it-it', 'it-sm', 'pt-pt', 'de-de', 'de-at', 'de-li', 'de-ch', 'nl-nl', 'nl-be', 'en-no', 'en-sj', 'en-fi', 'en-ax', 'en-dk', 'en-gl', 'en-is', 'ru-ru', 'pl-pl', 'bg-bg', 'cs-cz', 'el-gr', 'hu-hu', 'lt-lt', 'ro-ro', 'sk-sk', 'uk-ua', 'en-lv', 'en-rs', 'en-si', 'en-ba', 'en-cy', 'en-ee', 'en-hr', 'en-mk', 'en-mt', 'en-ph', 'en-mm', 'en-kh', 'en-mn', 'en-kz', 'en-la', 'en-za', 'en-ck', 'fr-ca', 'en-au', 'en-nz', 'es-ar', 'es-gt', 'es-do', 'es-hn', 'es-ni', 'es-pa', 'es-ec', 'es-py', 'es-ve', 'en-ae', 'en-lb', 'en-il', 'en-pk', 'id-id', 'tr-tr', 'ko-kr', 'th-th', 'en-ca', 'es-co', 'en-sg', 'zh-hk', 'zh-cn', 'en-in', 'en-bd', 'en-lk', 'en-np', 'en-mv', 'pt-br', 'es-pe', 'en-hk', 'ar', 'es-mx', 'ja-jp', 'en-my', 'vi-vn', 'zh-tw', 'en-se']
    
    out_langs = []
    for lang in langs:
        if not lang.split('-')[0] in [x.split('-')[0] for x in out_langs]:
            out_langs.append(lang)
    print(out_langs)
    # ['en-us', 'sv-se', 'fr-fr', 'es-es', 'it-it', 'pt-pt', 'de-de', 'nl-nl', 'ru-ru', 'pl-pl', 'bg-bg', 'cs-cz', 'el-gr', 'hu-hu', 'lt-lt', 'ro-ro', 'sk-sk', 'uk-ua', 'id-id', 'tr-tr', 'ko-kr', 'th-th', 'zh-hk', 'ar', 'ja-jp', 'vi-vn']


    либо так чуток оптимальней:
    langs = ...
    
    out_langs = []
    current_lang = None
    for lang in sorted(langs):
        if current_lang != lang.split('-')[0]:
            out_langs.append(lang)
            current_lang = lang.split('-')[0]
    print(out_langs)
    # ['ar', 'bg-bg', 'cs-cz', 'de-at', 'el-gr', 'en-ae', 'es-ar', 'fr-bl', 'hu-hu', 'id-id', 'it-it', 'ja-jp', 'ko-kr', 'lt-lt', 'nl-be', 'pl-pl', 'pt-br', 'ro-ro', 'ru-ru', 'sk-sk', 'sv-se', 'th-th', 'tr-tr', 'uk-ua', 'vi-vn', 'zh-cn']
    Ответ написан
    Комментировать
  • Есть ли разница в работе requests на Windows и на Mac?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Разницы быть не должно. Если вы используете одни и те же версии библиотек. И с кодировками ничего не намудрили, пытаясь к примеру файл в виндовой кодировке cp1251 в MacOS запускать… Но тут без кода - только гадать.
    Ответ написан
    Комментировать
  • Как запускать крон задачи из python virtual env?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Ну наверное потому во-первых - что путь нужно продолжить - что-то вроде:
    /opt/Python-3.8.7/proj/bin/python
    до бинарника который ваш скрипт запускать будет

    Во-вторых учесть что ваше окружение и окружение кронтаба - разные..
    Возможно будет нужно кой-какие пути прописать и прочее...
    Ответ написан
  • Ошибка python SyntaxError: invalid syntax как решить? [python-telegram-bot]?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Не закрыта скобка на предыдущей строке. Неужели самому не видно?
    Нужно призвать коллективный разум для этого?
    Ответ написан
  • Как взять значение и прибавить к нему 1 в файле .txt?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    InternetMaster,
    если файл существует - открыть его, прочитать число
    преобразовать число в int, прибавить единицу
    удалить старый файл
    записать файл с таким же названием и с инкрементом на его место

    если файла нет - то создать файл и записать туда 1

    вот собственно и все
    Какой именно пункт вызывает затруднение?
    Ответ написан
  • Как в python добавить 0, перед числом?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Изи:
    a = 10
    print(f'0,{a}')
    # 0,10
    Ответ написан
    2 комментария
  • Как реализовать поиск фраз в тексте по вордлисту?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Регулярки тут и не нужны:
    wordlist = [
        'Маша', 'Игорь', 'Светлана', 'Евгений'
    ]
    
    text = '''Задача организации, в особенности же разбавленное изрядной долей эмпатии,
    рациональное мышление обеспечивает широкому кругу (специалистов) Светлана Евгений Маша Игорь
    участие в формировании инновационных методов управления процессами.
    В своём стремлении улучшить пользовательский опыт мы упускаем, что некоторые особенности внутренней
    политики могут быть своевременно верифицированы.'''
    
    result = []
    for word in text.split():
        if word in wordlist:
            result.append(word)
    print(result)
    # ['Светлана', 'Евгений', 'Маша', 'Игорь']
    Ответ написан
    3 комментария
  • Python cv2 как перести многомерный массив в картинку?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    import cv2
    import matplotlib.pyplot as plt
    
    data = [
        ['255', '255', '255', '190', '190', '160', '76', '45', '78'],
        ['255', '255', '255', '190', '190', '160', '76', '45', '78'],
        ['255', '255', '255', '190', '190', '160', '76', '45', '78']
    ]
    
    to_chunks = lambda x, n:[x[i*n:i*n+n] for i in range(len(x) // n)]
    img = [to_chunks(list(map(int, row)), 3) for row in data]
    
    f,ax = plt.subplots(1,1)
    ax.imshow(img)

    618fb0849826b433569879.jpeg
    Ответ написан
    Комментировать
  • Почему парсятся только первые четыре товара в озон?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Потому что остальные лежат там в json. Который оттуда можно вытянуть, - да распарсить...
    import json
    import re
    json_dump = re.search(r'JSON.parse\(\'({.*})?\'\)', src)


    618cb4dc72b5e774768476.jpeg
    Ответ написан
    2 комментария
  • Может кто-то простыми словами пояснить как работают эти строчки кода?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    1. Cортируем список
    2. Берем элемент посредине списка
    3. Сравниваем с искомым
    4. Если искомое равно элементу - ура - нашли
    5. Если искомое больше элемента, то слева от элемента искать смысла нет - там числа заведомо меньшие - берем часть списка справа от элемента - с позиции +1 и до конца
    6. Если искомое меньше элемента, то справа от элемента искать смысла нет - там числа заведомо большие - берем часть списка слева от элемента - от начала и до позиции -1 до элемента
    7. Повторяем процедуру с шага 2 с новой частью списка.

    [1, 3, 5, 6, 6, 6, 7, 70] 
     0, 1, 2, 3, 4, 5, 6, 7   # позиции элементов
    элемент посредине - это 6 на позиции 3.
    
    Сравниваем с 20. 20 больше 6
    
    Значит слева от 6-ки смотреть числа смысла нет - это числа [1, 3, 5].
    
    Сама 6 тоже не нужна - мы ее уже сравнили с искомым и уже узнали что это не то число.
    
    Значит берем часть списка справа - 
    с позиции +1 - то есть с 4-й позиции и до конца - [6, 6, 7, 70]
    
    и т.п.

    Так понятно?
    Ответ написан
    5 комментариев