我可以将列表传递给 PyGame Music 吗?

Can I pass a list to PyGame Music?

Win 10/64 位/3.5:

我想将变量 (mp3Fin) 中的 .mp3 列表传递给 pygame.mixer.music.load()。有没有办法做到这一点? PyGame 在我单独加载时确实有效。我最近几周才学习 programming/python 并且是 Whosebug 的新手,如果我遗漏了任何内容,我深表歉意。

上次编辑 这是最新的代码,应该是正确的formatted/indented。它仍然出现错误,但错误已更改为与 'Rwops' 相关的内容。只在 bing 之外找到了几个关于 Rwops 的链接。将删除以前的代码,因为我认为它们不再有用了。

代码:

if catChow == cat1[0]:
        print("Welcome to SoCha's music player.")   
        def get_files(directories):
            mp3Pre = []
            for root, directories, files in os.walk(directories):
                for filename in files:
                #Joins the two strings in order to form the full filepath.
                    filepath = os.path.join(root, filename)
                    mp3Pre.append(filepath) #Adds to the mp3PreParse variable above.
            return mp3Pre
        mp3Post = get_files("C:\Users\SoCha\Music")
        pygame.mixer.init()
        pygame.mixer.music.load([s for s in mp3Post if s.endswith(".mp3")])
        pygame.mixer.music.play()

Rwops 错误:

Welcome to SoCha's music player.
Traceback (most recent call last):
  File "SoChaOS.2.0.py", line 38, in <module>
    pygame.mixer.music.load([s for s in mp3Post if s.endswith(".mp3")])
pygame.error: Couldn't read from RWops

***Repl Closed***

这是我对原版进行的最后一次编辑 post。

mp3fin 是一个字符串。你为什么要索引它?当你调用 split() 时,它 returns 一个数组,你打印它,然后扔掉。

在最后一行 pygame.mixer.music.load(mp3Fin[1]) 中,您正在拼接字符串并获取第二个字符,即“:”。

你应该直接打电话给 pygame.mixer.music.load(mp3Fin)


I want to pass a list of .mp3s from within a variable (mp3Fin) to pygame.mixer.music.load().

mp3Fin 不是列表。 mp3Post 是在您的目录中找到的文件列表。随着 for 循环的迭代,每个单独的文件都在 mp3Fin 中。尝试:

for mp3Fin in mp3Post:
    if mp3Fin.endswith(".mp3"):
        pygame.mixer.init()
        pygame.mixer.music.load(mp3Fin)

您可以尝试使用以下方法将列表传递给 load 购买:

mp3Post = get_files("C:\Users\SoCha\Music")
pygame.mixer.init()
pygame.mixer.music.load([s for s in mp3Post if s.endswith(".mp3")])

请记住,mp3Fin.split() 不会就地修改 mp3Fin - mp3Fin 仍然是一个字符串!

所以当你到达第 41 行时,mp3Fin[1] 正在获取 mp3Fin 位置 1 的字符。这就是错误中“:”的来源,C:/...

尝试直接将字符串发送给它

pygame.mixer.music.load(mp3Fin)

这些函数一定要小心!