0

フォルダー (MP3) 内のすべての .mp3 ファイル パスを収集し、それらを辞書内のキーに割り当てたいので、私のプログラムはシステム ファイルパスに関係なく動作します (現在、ファイル パスはハードコードされているため、プログラムは自分自身でのみ動作します)。パソコン)。

元の設定は次のとおりです。

NotePaths = {
"C" : "C:/.../MP3/C4.mp3",
"D" : "C:/.../MP3/D4.mp3",
"E" : "C:.../MP3/E4.mp3",
"F" : "C:/.../MP3/F4.mp3",
"G" : "C:/.../MP3/G4.mp3",
"A" : "C:/.../MP3/A4.mp3",
"H" : "C:/.../MP3/H4.mp3"
}

これは、プログラムが置かれている同じフォルダーに MP3 というフォルダー (必要な .mp3 ファイルを含む) がある限り、プログラムをシステムフォルダー構造から独立して動作させるために私が試みたことです。

NotePaths = {
"C" : "",
"D" : "",
"E" : "",
"F" : "",
"G" : "",
"A" : "",
"H" : ""
}

for root, dirs, files in os.walk("/MP3"):
    for file in files:
        if file.endswith(".mp3") and file.startswith("C"):
            NotePaths["C"].append(Str("(os.path.join(root, file))"))

        if file.endswith(".mp3") and file.startswith("D"):
            NotePaths["D"].append(Str("(os.path.join(root, file))"))

        if file.endswith(".mp3") and file.startswith("E"):
            NotePaths["E"].append(Str("(os.path.join(root, file))"))

        if file.endswith(".mp3") and file.startswith("F"):
            NotePaths["F"].append(Str("(os.path.join(root, file))"))

        if file.endswith(".mp3") and file.startswith("G"):
            NotePaths["G"].append(Str("(os.path.join(root, file))"))

        if file.endswith(".mp3") and file.startswith("A"):
            NotePaths["A"].append(Str("(os.path.join(root, file))"))

        if file.endswith(".mp3") and file.startswith("H"):
            NotePaths["H"].append(Str("(os.path.join(root, file))"))

プログラム (前述の .mp3 ファイルを再生する playsound コマンドを含む) を実行しようとすると、playsound モジュールが開き、次のエラーがスローされます。

Traceback (most recent call last):
  File "C:\...\Musical Quiz.py", line 67, in <module>
    playsound(currentPath)
  File "C:\...\AppData\Local\Programs\Python\Python38\lib\site-packages\playsound.py", line 35, in _playsoundWin
    winCommand('open "' + sound + '" alias', alias)
  File "C:\...\AppData\Local\Programs\Python\Python38\lib\site-packages\playsound.py", line 30, in winCommand
    '\n    ' + errorBuffer.value.decode())
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 60: invalid continuation byte

ファイルパスは、次のように playsound 関数に渡されます。

currentKey, currentPath = random.choice(list(NotePaths.items()))
playsound(currentPath)

更新

この回答に従ってコードをリファクタリングしました(ありがとう!)。ここで説明されているように、playsound モジュールを変更して (ここで説明されているように) 実際の問題を見つけようとしましたが、次の結果が得られました。

Traceback (most recent call last):
  File "C:\Users\...\Musical Quiz.py", line 67, in <module>
    playsound(currentPath)
  File "C:\Users\...\AppData\Local\Programs\Python\Python38\lib\site-packages\playsound.py", line 35, in _playsoundWin
    winCommand('open "' + sound + '" alias', alias)
  File "C:\Users\...\AppData\Local\Programs\Python\Python38\lib\site-packages\playsound.py", line 31, in winCommand
    raise PlaysoundException(exceptionMessage)
playsound.PlaysoundException: 
    Error 292 for command:
        open "" alias playsound_0.8907395801041198
    Der Befehl erfordert einen Alias-, Datei-, Treiber- oder Gertenamen.
    
##Attempted translation: the command requires an alias, file name, driver name or (I don't know what the last thing is)          

したがって、a) 私のコードが最初から機能せず、正しいファイルパスを取得できなかった、または b) playsound が私がやっていることを気に入らないようです。

4

1 に答える 1