Как открыть файл, если он соответствует указанному имени файла (имя файла получено с помощью распознавания речи)

#python #speech-recognition #python-os

#python #распознавание речи #python-os

Вопрос:

Я пытаюсь создать скрипт, который использует модуль распознавания речи для прослушивания вашего голоса и, соответственно, того, что он услышал, используя это в качестве имени файла, если оно находится в определенной папке (указав путь к нему), откройте файл… Однако я застрял, потому что я не могу заставить работать последний цикл for (тот, который прямо сейчас должен просто напечатать имя файла, если оно находится в папке).

 import speech_recognition as sr
import os 


search_path = 'C:/Users/andre/Desktop/foto_coso_python'
result = []

recognizer_instance = sr.Recognizer()

with sr.Microphone() as source:
    recognizer_instance.adjust_for_ambient_noise(source)
    print("I'm listening...")
    print()
    audio = recognizer_instance.listen(source)
    #print('Printing what I heard...')

try:
    text = recognizer_instance.recognize_google(audio, language='it-IT').upper()
    print(text)
except Exception as e:
    print(e)

list_text = text.split(' ')  #splits the text in single words
#print(list_text)


for root, dir, files in os.walk(search_path):
    for word in list_text:
        if word in files:
            result.append(os.path.join(root, word))


print(result)
 

Редактировать
Благодаря @loa_in_ я разобрался с этим циклом

 for word in list_text:
    for root, dir, files in os.walk(search_path):
        for filename in files:
            if word.lower() in filename.lower():
                result.append(filename)
 

Теперь результатом кода является имя файла (если он находится в папке).

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

1. Вы пошагово выполняли свой цикл построчно с помощью отладчика? Какое значение word и files в if word in files: ?

Ответ №1:

Если вы используете Windows (я предполагаю, что это так из ваших путей), то вам не следует сравнивать имена word in files файлов, поскольку это делает точное совпадение с учетом регистра:

  • «файл» и «Файл» не совпадают
  • «файл» и «File.txt » не будет соответствовать
  • «файл» и «file.txt » не будет соответствовать
  • «file» и «this_file_here» не будут совпадать
  • будут совпадать только «файл» и «файл»

Чтобы выполнить поиск слова в files массиве менее строгим образом, вы должны выполнить цикл: for filename in files и проверить, filename.lower() содержит word.lower() ли он — другими словами: проверить наличие подстроки после преобразования обеих строк в один и тот же регистр (будь то нижний или верхний регистр).

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

1. Тай, я попробую 🙂