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
相关产品推荐
相关产品推荐

