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

