You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python推送YouTube视频到Telegram时文件名含特殊字符报错如何解决?

错误原因

Windows系统禁止文件名包含 <、>、:、"、/、\、|、?、* 这些特殊字符,你当前处理的视频标题里带有双引号 ",直接用原始标题作为文件名保存、读取时就触发了系统层面的参数错误。

修复方案

你需要新增一个文件名清理函数,提前把标题里的非法字符替换成合法字符,同时下载时手动指定清理后的文件名,避免pytube用原始标题命名文件。

步骤1:新增文件名清理函数

在代码开头导入模块的部分之后,添加如下函数:

def clean_filename(raw_filename):
    # 替换所有Windows文件名非法字符为下划线
    illegal_chars = r'<>:"/\|?*'
    for c in illegal_chars:
        raw_filename = raw_filename.replace(c, '_')
    # 限制文件名长度避免过长报错,可根据需要调整长度
    return raw_filename.strip()[:200]

步骤2:修改下载和上传逻辑

如果需要保留Telegram端的视频标题显示原始带特殊字符的效果,可以先调整upload_video函数参数,再修改循环处理逻辑:

# 修改后的上传函数,分开传文件路径、展示用标题、描述
def upload_video(file_path, show_title, desc):
    bot.send_video(chat_id=bot_chatID, video=open(file_path, 'rb'),caption=f"{show_title}\n{desc}", supports_streaming=True)

for i in range(len(videos)):
    yt = YouTube(videos[i])
    print(f"{yt.title} : {videos[i]}")
    # 先清理标题得到合法文件名
    cleaned_title = clean_filename(yt.title)
    saved_file_path = f"{cleaned_title}.mp4"
    ys = yt.streams.get_highest_resolution()
    # 下载时手动指定文件名
    ys.download(filename=saved_file_path)
    # 上传时用清理后的路径读取文件,展示内容用原始标题
    upload_video(saved_file_path, yt.title, str(yt.description))
    # 可选:上传完成后删除本地文件,避免占用磁盘空间
    os.remove(saved_file_path)

内容的提问来源于stack exchange,提问作者Abbott Taft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:54:02