我正在用python制作一个音乐播放器,我添加了"将歌曲添加到播放列表";该功能将打开资源管理器,用户可以选择一个音乐文件,然后将该文件复制到名为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.copyfile
的工作方式可能存在误解。根据文档,dst
参数应该是完整的目标文件名。这意味着应该使用文件夹路径和文件名。
换句话说,它的工作方式是NOT如下:
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