Задать вопрос
Ответы пользователя по тегу Python
  • Как исправить игнорирование кода при импорте в python?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Используйте коги: https://discordpy.readthedocs.io/en/stable/ext/com...

    main.py:
    import discord
    from discord.ext import commands
    
    intents = discord.Intents.default()
    intents.message_content = True
    
    bot = commands.Bot(command_prefix="!", intents=intents)
    
    async def load_extensions():
        await bot.load_extension("ticket")  # Загружаем Cog без .py
    
    @bot.event
    async def on_ready():
        print(f"Бот {bot.user} готов!")
        await load_extensions()
    
    bot.run("***")


    ticket.py:
    from discord.ext import commands
    
    class TicketsCog(commands.Cog):
        def __init__(self, bot):
            self.bot = bot
    
        @commands.command(name="systicket")
        async def systicket(self, ctx):
            """Обработка команды !systicket"""
            # логика команды
            await ctx.send("Система тикетов работает!")  # Пример ответа
    
    async def setup(bot):
        await bot.add_cog(TicketsCog(bot))  # Важно: await и новое API discord.py 2.0+
    Ответ написан
    Комментировать
  • Как создать/изменить примечание (Note) в Google.Sheets.API?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    from googleapiclient.discovery import build
    from google.oauth2 import service_account
    
    # Укажите путь к скачанному JSON-файлу сервисного аккаунта
    SERVICE_ACCOUNT_FILE = 'ваш_сервис_аккаунт_файл.json'
    
    # Настройка доступа
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE,
        scopes=['https://www.googleapis.com/auth/spreadsheets'])
    
    service = build('sheets', 'v4', credentials=credentials)
    
    def update_note(spreadsheet_id, sheet_name, cell, note_text):
        # Конвертация имени ячейки в индексы:
        col = ord(cell[0].upper()) - ord('A')
        row = int(cell[1:]) - 1
    
        # Получаем ИД листа:
        spreadsheet = service.spreadsheets().get(
            spreadsheetId=spreadsheet_id,
            fields="sheets(properties(sheetId,title))"
        ).execute()
    
        sheetId = [sheet['properties']['sheetId'] for sheet in spreadsheet['sheets'] if
                   sheet['properties']['title'] == sheet_name][0]
        print(sheetId)
    
        service.spreadsheets().batchUpdate(
            spreadsheetId=spreadsheet_id,
            body={
                "requests": [{
                    "updateCells": {
                        "range": {
                            "sheetId": sheetId,
                            "startRowIndex": row,
                            #"endRowIndex": row + 1,
                            "startColumnIndex": col,
                            #"endColumnIndex": col + 1
                        },
                        "rows": [{"values": [{"note": note_text}]}],
                        "fields": "note"
                    }
                }]
            }
        ).execute()
    
    
    # Использование:
    spreadsheetId = 'ваш ид таблицы'
    update_note(spreadsheetId, "Лист3", "B3", "Тестовое примечание.")


    З.Ы. Для "сложных" ячеек ("AA15" итд.), если у вас такие есть, перепишите конвертацию имени ячейки в индексы, текущая работать не будет корректно.

    Чтение примечания с ячейки:
    def read_note(spreadsheet_id, sheet_name, cell) -> str or None:
        response = service.spreadsheets().get(
            spreadsheetId=spreadsheet_id,
            ranges=[f"{sheet_name}!{cell}"],
            fields='sheets(data.rowData.values.note)'
        ).execute()
    
        note = (response
                .get('sheets', [{}])[0]
                .get('data', [{}])[0]
                .get('rowData', [{}])[0]
                .get('values', [{}])[0]
                .get('note'))
    
        return note
    
    # Использование:
    spreadsheetId = 'ваш ид таблицы'
    read_note(spreadsheetId, 'Лист3', 'B3')
    Ответ написан
    1 комментарий
  • Взаимодействие с базой данных при сборке файла exe?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    izma, не нужны танцы с бубнами...

    Сделал тестовую программку на Tk и sqlite3. Всё, ожидаемо, собирается.
    1. До БД должен быть абсолютный путь, используем:
    def get_db_path():
        if getattr(sys, 'frozen', False):
            # Если запущен из .exe, использовать путь рядом с исполняемым файлом
            return os.path.join(os.path.dirname(sys.executable), 'database.db')
        else:
            # При обычном запуске — рядом с .py файлом
            return os.path.join(os.path.dirname(__file__), 'database.db')

    2. Собираем: pyinstaller --onefile --windowed app.py
    3. Кладём базу рядом с exe-ником.

    З.Ы. Если база нужна только в режиме чтения можно её тоже интегрировать в exe.
    pyinstaller --onefile --add-data "database.db;." --windowed app.py
    Ответ написан
    2 комментария
  • Сборка python файла с расширением pyw в exe файл??

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Перенести сборку в папку с не таким длинным названием: D:\Yandex....(+100500 символов).
    Не использовать папку/файл с таким длинным названием.
    Ответ написан
    5 комментариев
  • Ошибка при работе Python + 1C?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    obj = rs.Справочники.Номенклатура.НайтипоКоду('0001')

    У вас метод неправильно написан: НайтиПоКоду().
    Ответ написан
    Комментировать
  • Как через subprocess выполнять скрипты с пробелами в путях?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    subprocess.Popen(
        f'cmd /k ""{path_app}" "{path_file}""',
        creationflags=subprocess.CREATE_NEW_CONSOLE
    )

    68234e308f567451893958.png
    Ответ написан
    1 комментарий
  • Как добавить в дату, записанную в строке, нули перед месяцем и днём?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    d = '2025-2-1'
    l = d.split('-')
    for i, el in enumerate(l):
        if len(el) < 2:
            l[i] = '0' + el
    
    print('-'.join(l))
    Ответ написан
    1 комментарий
  • Почему возникает ошибка в моем коде (баг f-строк)?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Используйте версию питона >=3.12.
    До Python 3.12 обратные косые черты не допускались внутри поля замены f-строки. f-strings

    Или, если это невозможно, то так:
    things = ['Thing one','Thing two','Thing three']
    nl = '\n'
    print(f"I have a list of things:\n{nl.join(things)}")
    Ответ написан
    Комментировать
  • Как эту задачу решить по другому?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Очевидно не перебирать все варианты, а решить систему уравнений:
    import numpy as np
    
    A = np.array([[5, 3], [3, 3]])
    B = np.array([46.2, 31.5])
    
    # Решаем систему уравнений
    x, y = np.linalg.solve(A, B)
    print(round(x, 2), round(y, 2))
    Ответ написан
    Комментировать
  • Как правильно обрабатывать ошибки при чтении файла?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Использовать with.

    try:
        with open('test.txt', 'r') as file:
            print("File exists and is accessible.")
    except FileNotFoundError:
        print("File does not exist.")
    except PermissionError:
        print("File exists but cannot be accessed.")
    Ответ написан
    Комментировать
  • Как создать элементы в цикле python?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    command=lambda v=val: radio(v['stream'])
    Ответ написан
    5 комментариев
  • Почему не отображается время работы функции при использовании datetime.now()?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    natalya1000, Сделайте чуть более нагруженную функцию. То что у вас сейчас считается за столь незначительное время, что у вас всегда будет по нулям.

    Ну и, если вам непременно нужно подсчитывать столь незначительные промежутки, используйте
    perf_counter() из модуля time.
    Ответ написан
  • Проблема с округлением переменных через round, как исправить?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Ф-строки смотрите:
    print(f'lol kek, {cnt}')
    Ответ написан
    2 комментария
  • Как добавить в приложение видео из html-фреймов (youtube, vk, vimeo)?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Почему не на stackoverflow, например?
    За две минуты - две ссылки с воспроизводимым кодом. На pyside6, и на PyQt5, которые можно взять посмотреть.

    https://stackoverflow.com/questions/77977192/pysid...

    https://stackoverflow.com/questions/67521837/how-t...
    Ответ написан
  • Как вывести определенное расширение TLS из .pcapng файла с помощью pyshark?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Так не пойдёт?
    import pyshark
    
    display_filter = 'tls.record.content_type == 22'
    pcap = pyshark.FileCapture(file_path, display_filter=display_filter)
    d = {}
    
    for packet_number, packet in enumerate(pcap):
        for layer in packet:
            if 'Supported Version:' in str(layer):
                for line in str(layer).splitlines():
                    if 'Supported Version:' in line:
                        tls_version = line.split(' ')[3]
                        if packet_number in d:
                            d[packet_number].append(tls_version)
                        else:
                            d[packet_number] = [tls_version]
    
    print(d)
    
    >>> {0: ['1.3', '1.2'], 1: ['1.3'], 2: ['1.3', '1.2'], 3: ['1.3'], 4: ['1.3', '1.2'], 5: ['1.3']}
    Ответ написан
  • Как в Python удалить текст до определённых символов?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import re
    
    s = "57-09-71 МегаФонe-mail: ? vy:juf , h 5555y676hr965 silava.a@ttgr :  https://loads.ru"
    
    url_pattern = r'https?://\S+'
    url_match = re.search(url_pattern, s)
    
    if url_match:
        url = url_match.group(0)
        print(url)
    else:
        print("Ссылка не найдена")
    
    >>> https://loads.ru


    Но, если формат строки не меняется, то и обычный сплит сработает:
    print(s.split(' ')[-1])
    Ответ написан
    4 комментария
  • Как решить проблему с таймзонами при нахождении дельты?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    "иногда" - это, видимо, в момент смены даты.
    Так как start_timeзаведомо "меньше", чем server_time, а вы вычитаете из меньшего большее, то и возникает разница в -1 день.
    Используйте absпри подсчёте дельты:

    from datetime import datetime, timezone
    
    start_time  = datetime(2025, 1, 27, 23, 59, 59, tzinfo=timezone.utc)
    server_time = datetime(2025, 1, 28, 0, 0, 0, tzinfo=timezone.utc)
    delta = start_time - server_time
    print("Дельта:", delta)
    >>> Дельта: -1 day, 23:59:59
    
    abs_delta = abs(start_time - server_time)
    print("Дельта:", abs_delta)
    >>> Дельта: 0:00:01
    Ответ написан
    Комментировать
  • Как воспроизвести .mp3 файл на Python с помощью PyGlet?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    В путях используйте r.
    song = pyglet.media.load(r"C:\Users\Station\Music\padenie-truby.mp3")
    Ответ написан
    1 комментарий
  • Как написать автоматизированный тест для тестирования сортировки по цене?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    its_southpaw, [тестил на Win10, Edge].
    1. Что-то не так с селекторами, с теми которые у вас мне не удалось отыскать элементы.
    Для того, чтобы хотя бы был клик по выпадающему меню, использовал такой:
    SORT_BUTTON = (By.XPATH, "(//span[@class='select2-selection select2-selection--single select2-selection--buttoned select2-selection--buttoned-dark select select--sorting'])[1]")

    2. Для SORT_ASC использовал такой:
    SORT_ASC_OPTION = (By.ID, 'select2-catalog_sorting_mobile-7h-result-jsvp-price:asc')

    3. Для SORT_DESC вы вообще решили не писать.
    SORT_DESC_OPTION = (By.ID, 'select2-catalog_sorting_mobile-7h-result-jsvp-price:desc')

    4. В def select_sort_option() добавил небольшую задержку (2-3 секунды) после
    WebDriverWait(self.driver, 10).until(EC.staleness_of(option))
    .

    После этих манипуляций стало так:
    675a4852cde6a196859565.png

    Но второй тест не пройдёт, потому что вот это:
    675a46e898655425277103.png
    Что приводит к: [...11900, 11900, 7735, 11900...], что никак не будет равно отсортированному списку цен в assert.

    З.Ы. если вы хотите читаемую кириллицу в выводе, а не вот это вот:
    test_sort_by_price[\u0426\u0435\u043d\u0430 \u043f\u043e \u0432\u043e\u0437\
    ,
    то добавьте файлик pytest.ini с содержимым:
    [pytest]
    disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True
    Ответ написан
    Комментировать
  • Как закрыть файл (фотографию) после использования команды os.startfile?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Закрывайте приложение, которое открывает файл, как вариант:
    os.system('taskkill /IM Honeyview.exe') # <= поменяйте на ту программу что у вас ассоциирована с jpg.


    З.Ы. os.startfile() возвращает None, нет смысла присваивать переменной.
    Ответ написан
    5 комментариев