Python youtube_dl下载视频报错TypeError:期望字符串或类字节对象
解决youtube-dl设置outtmpl时的TypeError问题
嘿,这个问题我之前处理过类似的,咱们来拆解一下原因和解决办法!
问题根源
你遇到的TypeError: expected string or bytes-like object,本质上是因为传给outtmpl的movieId不是字符串类型。从CSV里读取数据时,很多CSV解析工具(比如Python内置的csv模块)会自动把数字格式的内容转换成整数/浮点数,而youtube-dl的outtmpl参数要求必须传入字符串格式的文件名模板,类型不匹配就会触发这个错误。
具体解决步骤
先确认
movieId的类型
在代码里加一行调试代码,看看读取到的movieId到底是什么类型:print(type(row['movieId']))如果输出是
<class 'int'>或者<class 'float'>,那就是类型问题无疑了。把
movieId显式转换为字符串
有两种方式可以处理:- 读取CSV时直接转成字符串:
import csv with open('movieClips_final.csv', 'r') as f: reader = csv.DictReader(f) for row in reader: # 强制转换为字符串 movie_id = str(row['movieId']) you_id = row['youID'] # 后续下载代码... - 在设置
outtmpl时转换:ydl_opts = { # 把movie_id转成字符串后再拼接模板 'outtmpl': f'{str(movie_id)}.mp4' }
- 读取CSV时直接转成字符串:
如果用pandas读CSV的额外处理
要是你用pandas读取CSV文件,可以直接指定movieId列的类型为字符串,避免自动转换:import pandas as pd df = pd.read_csv('movieClips_final.csv', dtype={'movieId': str})
验证修改
修改之后再运行脚本,应该就能正常以movieId命名保存视频了——本质就是确保文件名模板里的每一部分都是字符串类型,符合youtube-dl的参数要求。
内容的提问来源于stack exchange,提问作者YAS
相关产品推荐
相关产品推荐

