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

Python youtube_dl下载视频报错TypeError:期望字符串或类字节对象

解决youtube-dl设置outtmpl时的TypeError问题

嘿,这个问题我之前处理过类似的,咱们来拆解一下原因和解决办法!

问题根源

你遇到的TypeError: expected string or bytes-like object,本质上是因为传给outtmpl的movieId不是字符串类型。从CSV里读取数据时,很多CSV解析工具(比如Python内置的csv模块)会自动把数字格式的内容转换成整数/浮点数,而youtube-dl的outtmpl参数要求必须传入字符串格式的文件名模板,类型不匹配就会触发这个错误。

具体解决步骤

  1. 先确认movieId的类型
    在代码里加一行调试代码,看看读取到的movieId到底是什么类型:

    print(type(row['movieId']))
    

    如果输出是<class 'int'>或者<class 'float'>,那就是类型问题无疑了。

  2. 把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'
      }
      
  3. 如果用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:00:26