为什么我的代码不断重命名我的文件 "Playlist"?

Why does my code keep renaming my file "Playlist"?

我正在用 python 制作一个音乐播放器,我添加了“将歌曲添加到播放列表”功能,它将打开资源管理器,用户可以 select 一个音乐文件然后将该文件复制到一个名为 Playlist 的不同目录中。

os.chdir("./playlist")
print(os.getcwd)
songlist = os.listdir()
playlistloc = "./playlist"

def browse_file():
    global filename_path
    filename_path = filedialog.askopenfilename()
    print(filename_path)
    add_to_playlist(filename_path)

def add_to_playlist(filename):
    filename = os.path.basename(filename)
    shutil.copyfile(filename_path, playlistloc)

我不知道为什么它一直称它为播放列表,但它确实播放了那首歌。 请帮助,通常不知道为什么会这样,是否与 shutil 有关?

可能对 shutil.copyfile 的工作原理存在误解。根据文档,dst 参数应该是 完整的目标文件名 。这意味着应该使用文件夹路径 文件名。

换句话说,它的工作方式是不是这样的:

shutil.copyfile("./some/location/with/song1.mp3", "./destination/location")

而是:

shutil.copyfile("./some/location/with/song1.mp3", "./destination/location/song1.mp3")

所以这是一个例子,我更改了一些变量名,使它们在 add_to_playlist 函数中更明确:

os.chdir("./playlist")
print(os.getcwd)
songlist = os.listdir()
playlistloc = "./playlist"

def browse_file():
    global filename_path
    filename_path = filedialog.askopenfilename()
    print(filename_path)
    add_to_playlist(filename_path)

def add_to_playlist(src_filename_path):
    src_filename = os.path.basename(src_filename_path)  # get the filename alone
    dst_filename_path = os.path.join(playlistloc, src_filename)  # build the destination full path: concat the filename to the destination location
    shutil.copyfile(src_filename_path, dst_filename_path)  # do the copy