os.path.isfile 方法究竟对这段代码中的功能做了什么,为什么它的行为如此奇怪?

问题描述

这是用户 Pedro Lobito 一年前在此处提交的代码https://stackoverflow.com/a/60490761/874188

它应该根据搜索到的关键字下载一个 youtube .mp3 文件

import youtube_dl  # youtube-dl-2020.3.1
import traceback,os,json
from youtube_search import YoutubeSearch  # pip install youtube_search 

search = 'carlos paiao playback'
ydl_opts = {
   'format': 'beataudio/best','postprocessors': [{
       'key': 'FFmpegExtractAudio','preferredcodec': 'mp3','preferredquality': '192'
   }]
}
yt = YoutubeSearch(search,max_results=1).to_json()
try:
    yt_id = str(json.loads(yt)['videos'][0]['id'])
    yt_url = 'https://www.youtube.com/watch?v='+yt_id
    with youtube_dl.YoutubedL(ydl_opts) as ydl:
        ydl.download([yt_url])
        info = ydl.extract_info(yt_url)
        songname = info.get('title',None) + "-" + yt_id + ".mp3"
        if os.path.isfile(songname):
            print("Song Downloaded: " + songname)
        else:
            print("Error: " + songname)
except:
    pass
    print(traceback.print_exc())
    print("no results")

正如您可以测试的那样,对于 search 字符串下提供的示例,它运行良好。但是,假设您为 youtube 视频添加诸如“我们倒下”之类的关键字,os.path.isfile 将被标记False,并且下载将无法进行。它似乎 50/50 有效,有些关键字有效,有些则无效,而且我完全不知道为什么 os.path.isfile 会这样。我试图与原始海报取得联系,但我的代表太低了。原帖:how to use a key words instead of a url with youtube-dl and discord.py?

编辑 1 os.path.isfile 有时看似无缘无故返回 false 的原因是,YouTube 标题有时可能包含文件名中禁止使用的字符。这个问题可以解决吗,或者有什么替代方法可以绕过这个问题?我的操作系统是 Windows 10。

编辑 2 好吧,我完蛋了。 https://superuser.com/questions/1112132/how-to-create-folder-name-or-file-name-with-special-characters-like

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)