Ошибка при создании голосового помощника spotify

#python #python-3.x

Вопрос:

Привет, я хотел сделать голосового помощника spotify и нашел учебник человека, который только что просмотрел свой код и объяснил его, а также оставил ссылку на github ниже, и я использовал ее и изменил настройки, чтобы они работали на меня, но я получаю досадную ошибку, я помещу код для 3 файлов, которые у меня есть. main.py, pepper.py и setup.txt

main.py:

 import pandas as pd
from speech_recognition import Microphone, Recognizer, UnknownValueError
import spotipy as sp
from spotipy.oauth2 import SpotifyOAuth

from pepper import *

# Set variables from setup.txt
setup = pd.read_csv('C:UsersYousifDocumentsPython spotifysetup.txt', sep='=', index_col=0, squeeze=True, header=None)
client_id = setup['client_id']
client_secret = setup['client_secret']
device_name = setup['device_name']
redirect_uri = setup['redirect_uri']
scope = setup['scope']
username = setup['username']

# Connecting to the Spotify account
auth_manager = SpotifyOAuth(
    client_id=client_id,
    client_secret=client_secret,
    redirect_uri=redirect_uri,
    scope=scope,
    username=username)
spotify = sp.Spotify(auth_manager=auth_manager)

# Selecting device to play from
devices = spotify.devices()
deviceID = None
for d in devices['devices']:
    d['name'] = d['name'].replace('’', ''')
    if d['name'] == device_name:
        deviceID = d['id']
        break

# Setup microphone and speech recognizer
r = Recognizer()
m = None
input_mic = 'High Definition Audio Device'  # Use whatever is your desired input
for i, microphone_name in enumerate(Microphone.list_microphone_names()):
    if microphone_name == "High Definition Audio Device":
        m = Microphone(device_index=i)

while True:
    with m as source:
        r.adjust_for_ambient_noise(source=source)
        audio = r.listen(source=source)

    command = None
    try:
        command = r.recognize_google(audio_data=audio).lower()
    except UnknownValueError:
        continue

    print(command)
    words = command.split()
    if len(words) <= 1:
        print('Could not understand. Try again')
        continue

    name = ' '.join(words[1:])
    try:
        if words[0] == 'album':
            uri = get_album_uri(spotify=spotify, name=name)
            play_album(spotify=spotify, device_id=deviceID, uri=uri)
        elif words[0] == 'artist':
            uri = get_artist_uri(spotify=spotify, name=name)
            play_artist(spotify=spotify, device_id=deviceID, uri=uri)
        elif words[0] == 'play':
            uri = get_track_uri(spotify=spotify, name=name)
            play_track(spotify=spotify, device_id=deviceID, uri=uri)
        else:
            print('Specify either "album", "artist" or "play". Try Again')
    except InvalidSearchError:
        print('InvalidSearchError. Try Again')
 

pepper.py:

 from spotipy import Spotify


class InvalidSearchError(Exception):
    pass


def get_album_uri(spotify: Spotify, name: str) -> str:
    """
    :param spotify: Spotify object to make the search from
    :param name: album name
    :return: Spotify uri of the desired album
    """

    # Replace all spaces in name with ' '
    original = name
    name = name.replace(' ', ' ')

    results = spotify.search(q=name, limit=1, type='album')
    if not results['albums']['items']:
        raise InvalidSearchError(f'No album named "{original}"')
    album_uri = results['albums']['items'][0]['uri']
    return album_uri


def get_artist_uri(spotify: Spotify, name: str) -> str:
    """
    :param spotify: Spotify object to make the search from
    :param name: album name
    :return: Spotify uri of the desired artist
    """

    # Replace all spaces in name with ' '
    original = name
    name = name.replace(' ', ' ')

    results = spotify.search(q=name, limit=1, type='artist')
    if not results['artists']['items']:
        raise InvalidSearchError(f'No artist named "{original}"')
    artist_uri = results['artists']['items'][0]['uri']
    print(results['artists']['items'][0]['name'])
    return artist_uri


def get_track_uri(spotify: Spotify, name: str) -> str:
    """
    :param spotify: Spotify object to make the search from
    :param name: track name
    :return: Spotify uri of the desired track
    """

    # Replace all spaces in name with ' '
    original = name
    name = name.replace(' ', ' ')

    results = spotify.search(q=name, limit=1, type='track')
    if not results['tracks']['items']:
        raise InvalidSearchError(f'No track named "{original}"')
    track_uri = results['tracks']['items'][0]['uri']
    return track_uri


def play_album(spotify=None, device_id=None, uri=None):
    spotify.start_playback(device_id=device_id, context_uri=uri)


def play_artist(spotify=None, device_id=None, uri=None):
    spotify.start_playback(device_id=device_id, context_uri=uri)


def play_track(spotify=None, device_id=None, uri=None):
    spotify.start_playback(device_id=device_id, uris=[uri])
 

и setup.txt:

 client_id=...
client_secret=...
device_name=Yousif
redirect_uri=https://yousifisdaddy.com/
username=wsk5vzl3hw3i611coxgxog2il
scope=user-read-private user-read-playback-state user-modify-playback-state
 

и я действительно ввел свой uri перенаправления, который находится в моем приложении spotify, и я ввел свой идентификатор клиента, секретный идентификатор и свой setup.txt местоположение, но, очевидно, пришлось стереть идентификатор клиента и секретный идентификатор

И ошибка, которую я получил, это:

   File "c:/Users/Yousif/Documents/Python spotify/main.py", line 9
    setup = pd.read_csv('C:UsersYousifDocumentsPython spotifysetup.txt', sep='=', index_col=0, squeeze=True, header=None)
                       ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXXXXXXXX escape
 

Ответ №1:

Изменить

 setup = pd.read_csv('C:UsersYousifDocumentsPython spotifysetup.txt', sep='=', index_col=0, squeeze=True, header=None)
 

Для

 setup = pd.read_csv(r'C:UsersYousifDocumentsPython spotifysetup.txt', sep='=', index_col=0, squeeze=True, header=None)
 

Пометка пути в виде необработанной строки предотвратит появление экранирования обратной косой черты.

Причина этого:

Python использует escape-последовательности строк для поддержки юникода:

Из документов:

 N{name}: Character named name in the Unicode database
uxxxx: Character with 16-bit hex value xxxx
Uxxxxxxxx: Character with 32-bit hex value xxxxxxxx
 

Комментарии:

1. Я сделал это, и я получил эту ошибку « Файл «c:/Users/Yousif/Documents/Python spotify/main.py», строка 9, в <модуле> настройка = pd.read_csv(r’C:UsersYousifDocumentsPython spotifysetup.txt’, sep=’=’, index_col=0, squeeze=True, заголовок=Нет) Файл «C:UsersYousifAppDataLocalProgramsPythonPython37libsite-packagespandasioparsers.py», строка 688, в read_csv возвращает _read(путь к файлу_ор_буфер, kwds

2. Файл «C:UsersYousifAppDataLocalProgramsPythonPython37libsite-packagespandasioparsers.py», строка 454, в синтаксическом анализаторе _read = TextFileReader(fp_or_buf, **kwds) Файл «C:UsersYousifAppDataLocalProgramsPythonPython37libsite-packagespandasioparsers.py», строка 948, в файле init self._make_engine(self.engine) «C:UsersYousifAppDataLocalProgramsPythonPython37libsite-packagespandasioparsers.py», строка 1180, в _make_engine self. _engine = CParserWrapper(self.f, **self.опции)

3. Файл «C:UsersYousifAppDataLocalProgramsPythonPython37libsite-packagespandasioparsers.py», строка 2010, в инициализации self._reader = синтаксический анализатор.TextReader(src, **kwds) Файл «pandas_libsparsers.pyx», строка 540, в панд. _libs.синтаксические анализаторы.текстовый редактор.__cinit__ панды.ошибки. Ошибка EmptyDataError: Нет столбцов для анализа из файла

4. «Нет столбцов для анализа из файла» — это другая ошибка. Ошибка, с которой связан этот вопрос, похоже, будет решена. 🙂

5. но текст покраснел, значит ли это что-нибудь?