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

    npanuhin
    @npanuhin
    Вот один из вариантов:
    import random
    
    f = open('rad.txt', 'r', encoding='utf-8')
    
    d = {}
    for line in f:
        keys = line[:line.index('==') - 1].split('\\')
        values = line[3 + line.index('=='):].split('\\')
        for key in keys:
            d[key] = values
    
    f.close()
    
    response = "привет"
    for key in d.keys():
        if key in response.lower():
            lep = random.choice(d[key])
    
    print(lep)

    1. Получаем все ключи
    2. Получаем все значения
    3. Для каждого ключа создаём пункт в d равный массиву со всеми значениями

    Если важно потребление памяти, то лучше сделать, например, такую структуру:
    spoiler
    [
    	[
    		["привет", "хай", "здравствуй"], ["Привет", "Здравствуй", "Привет"]
    	],
    	[
    		Другая фраза
    	]
    ]

    А затем делать:
    For по фразам:
        For по ключам:
            Random по значениям

    Ответ написан
    5 комментариев
  • Почему словарь не записывается в JSON-файл(Python)?

    npanuhin
    @npanuhin
    1) choose_files(directory) не выполняется из-за return строчкой выше.
    2) extract_tags(audiofile) не выполняется из-за return строчкой выше.
    4) Вы передаёте в json.dump словарь, ключами которого являются объекты класса mutagen.mp3.MP3, что делать нельзя (они не умеют сами преобразовываться в тип str).
    5) Замечание: Если открываете файл с ключом 'w', то он будет очищаться при каждом открытии. Таким образом в нём окажется информация только о последнем файле, потому что вызываете вы write_tags() почему-то не в конце, а после каждого файла
    6) Замечание: Вы передаёте в функцию extract_tags не строку, а объект mutagen.mp3.MP3 . Так что extract_tags(audiofile: str) это не верно.

    Исправленный код

    import mutagen
    import datetime
    
    import os
    os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
    # import pygame
    
    import json
    from mutagen.id3 import ID3
    from tkinter import *
    from tkinter.filedialog import askdirectory
    
    root = Tk()
    root.minsize(300, 300)
    all_tags = {}
    
    
    def write_tags() -> None:
        '''Функция записывает словарь 'all_tags' в JSON-файл.'''
        with open("C:\\Users\\101ap\\Desktop\\Player\\tags.json", 'w') as t:
            json.dump(all_tags, t, indent=4, ensure_ascii=False)
    
    
    def extract_tags(path) -> None:
        '''Функция получает путь до MP3-файла, извлекает из него теги и наполняет ими
           словарь 'song_tags', который передает в словарь 'all_tags'.'''
    
        audiofile = mutagen.File(path)
    
        # print(path, audiofile)
    
        song_tags = {}
        song_tags['Path to the File'] = path
    
        if audiofile.tags:
    
            song_title = audiofile.tags.getall('TIT2')
            song_tags['Song Title'] = str(song_title[0]) if song_title else None
            '''Метод извлекает из MP3-файла название композиции.'''
    
            album_title = audiofile.tags.getall('TALB')
            song_tags['Album Title'] = str(album_title[0]) if album_title else None
            '''Метод извлекает из MP3-файла название альбома.'''
    
            song_artist = audiofile.tags.getall('TPE1')
            song_tags['Song Artist'] = str(song_artist[0]) if song_artist else None
            '''Метод извлекает из MP3-файла имя исполнителя композиции.'''
    
            album_artist = audiofile.tags.getall('TPE2')
            song_tags['Album Artist'] = str(album_artist[0]) if album_artist else None
            '''Метод извлекает из MP3-файла имя исполнителя альбома.'''
    
            year_of_publishing = audiofile.tags.getall('TDRC')
            song_tags['Year of Publishing'] = str(year_of_publishing[0]) if year_of_publishing else None
            '''Метод извлекает из MP3-файла имя исполнителя альбома.'''
    
            track_number = audiofile.tags.getall('TRCK')
            song_tags['Track Number'] = str(track_number[0]) if track_number else None
            '''Метод извлекает из MP3-файла порядковый номер композиции.'''
    
            song_tags['Length'] = str(datetime.timedelta(seconds=audiofile.info.length))
            '''Метод извлекает из MP3-файла длину композиции.'''
    
            song_tags['Bitrate'] = audiofile.info.bitrate
            '''Метод извлекает из MP3-файла битрейт композиции.'''
    
        return song_tags
    
    
    def choose_files(directory: str) -> None:
        '''Функция получает путь к директории, отбирает MP3-файлы,
           применяет extract_tags к каждому из них.'''
        for file in os.listdir(directory):
            if file.endswith(".mp3"):
                all_tags[file] = extract_tags(os.path.realpath(file))
        write_tags()
    
    
    def choose_directory(event) -> None:
        '''Функция открывает диалоговое окно выбора директории с MP3-файлами'''
        directory = askdirectory()
        os.chdir(directory)
        choose_files(directory)
    
        exit()
    
    
    choosedirectory = Button(root, text='Choose Directory')
    choosedirectory.pack()
    choosedirectory.bind("<Button-1>", choose_directory)
    
    root.mainloop()

    Ответ написан
    9 комментариев
  • Как реализовать многопоточность в программе?

    npanuhin
    @npanuhin
    Если файл с if __name__ == "__main__": запускается из какого-то другого файла, то if не сработает.
    Соответственно если нужно использовать файл в программе с многопоточностью, нужно этот if убрать.
    Ответ написан
    Комментировать
  • Как исправить ошибку при скачивание pyowm?

    npanuhin
    @npanuhin
    1) Попробуйте py -3.8 -m pip install -U pyowm --no-cache-dir
    2) Если всё равно ошибка, то можно установить из исходников, скачав на PYPI файл .whl и установив командой
    py -3.8 -m pip install {путь}pyowm-2.10.0-py3-none-any.whl

    Это может помочь.
    Ответ написан
  • Как работают точки в python?

    npanuhin
    @npanuhin
    Разберём pygame.display.set_mode((800, 600)):
    • pygame - имя модуля. Модули могут содержать классы, фунции, переменные. Можно прочитать, например, здесь
    • display (pygame.display) - класс модуля pygame. Обычный класс в каком-то файле модуля. Как из вашего примера про Person и Student
    • set_mode (pygame.display.set_mode) - функция в этом классе

    Например, создадим файл test.py:
    class Person():   # аналог display
        b = lambda x: x**2
        def count(a):   # аналог set_mode
            return 3 * a

    Тогда верна следующая конструкция (для любого файла в той же директории):
    import test
    print( test.Person.count(2) )  # выведет 6


    Так что это работает не так, как вы предложили.
    set_mode это функция, а не класс - функция в классе display.
    Ответ написан
    Комментировать
  • Почему словарь не записывается в JSON-файл?

    npanuhin
    @npanuhin
    Вы переходите в другую директорию:
    os.chdir(directory)
    Соответственно там файл и создаётся. (Можете проверить)

    Вариант решения: Запомнить директорию вызова и перед созданием файла сделать
    os.chdir(exec_directory)
    Ответ написан
  • Почему не работает код?

    npanuhin
    @npanuhin
    Наверное, вы имели в виду либо так:
    Meal = "Бельгийские вафли" and price1 == 400

    либо так:
    Meal = "Бельгийские вафли"
    price1 = 400


    = - присваивание (пусть a равно b)
    == - проверка на идентичность (правда ли, что a равно b; если a равно b)
    Ответ написан
    3 комментария
  • Как устранить ошибку ssl сертификата в Python?

    npanuhin
    @npanuhin Автор вопроса
    В этой ситуации код должен быть следующим (модулями для python3, позволяющими "проще" взаимодействовать с VK API лучше не пользоваться):

    import requests
    r = requests.get("url", params={"key_1": "value_1", "key_N": "value_N"}, verify=False)


    "verify=False" говорит requests, что не нужно проверять сертификат при выполнении запроса.

    Возможны предупреждения со стороны python, но они не влияют на ход выполнения программы.
    Как отключить уведомление безопасности

    До выполнения запросов с "verify=False" вставьте:
    from urllib3 import disable_warnings, exceptions
    disable_warnings(exceptions.InsecureRequestWarning)

    Ответ написан
  • Как устранить ошибку ssl сертификата в Python?

    npanuhin
    @npanuhin Автор вопроса
    В этой ситуации код должен быть следующим (модулями для python3, позволяющими "проще" взаимодействовать с VK API лучше не пользоваться):

    import requests
    r = requests.get("url", params={"key_1": "value_1", "key_N": "value_N"}, verify=False)


    "verify=False" говорит requests, что не нужно проверять сертификат при выполнении запроса.

    Возможны предупреждения со стороны python, но они не влияют на ход выполнения программы.
    Как отключить уведомление безопасности

    До выполнения запросов с "verify=False" вставьте:
    from urllib3 import disable_warnings, exceptions
    disable_warnings(exceptions.InsecureRequestWarning)

    Ответ написан
    Комментировать