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

使用Pytube下载YouTube播放列表并重命名时遇OSError报错求助

解决Pytube下载播放列表重命名时的OSError: Errno 22错误

错误原因

你的问题是Windows文件名包含非法字符导致的。Windows系统不允许文件名中出现 < > : " / \ | ? * 这些字符,而YouTube视频标题常包含冒号、斜杠这类字符,直接用原标题作为文件名会触发OSError: [Errno 22] Invalid argument。

解决方案

添加一个函数清理标题中的非法字符,同时修正循环中序号不递增的问题,确保每个视频文件名唯一。

修改后的完整代码

from pytube import Playlist
import re
import os

def clean_filename(title):
    # 移除Windows文件名中不允许的字符
    illegal_chars = r'[<>:\"/\\|?*]'
    return re.sub(illegal_chars, '', title)

math_playlist = Playlist("https://www.youtube.com/watch?v=oI_C-l-dcPw&list=PLf0dYueVuajYt1LUolD6SizWt1ED6GU4B")

i = 1
folder = r"T:\Videos\Mathematics\"  # 用原始字符串避免转义问题

# 确保输出文件夹存在,防止路径不存在报错
os.makedirs(folder, exist_ok=True)

for video in math_playlist.videos:
    clean_title = clean_filename(video.title)
    f_name = f"{i} - {clean_title}.mp4"  # 显式添加.mp4后缀,避免无扩展名
    video.streams.get_highest_resolution().download(output_path=folder, filename=f_name)
    i += 1  # 递增序号,保证每个视频文件名唯一

关键修改点说明

  • 清理非法字符:用正则表达式替换标题中的Windows禁用字符,规避文件名无效问题。
  • 递增序号i:原代码未递增序号,会导致所有视频重名覆盖,添加i += 1后保证序号依次递增。
  • 显式添加扩展名:pytube有时不会自动添加.mp4后缀,手动添加可避免文件无法直接识别。
  • 原始字符串路径:用r""定义路径,避免转义字符引发的路径解析错误。
  • 确保文件夹存在:用os.makedirs创建文件夹(不存在时),防止因路径不存在报错。

内容的提问来源于stack exchange,提问作者Anoop Janakar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:32:20