如何将字符串形式的关键字参数传入Python的pytubefix filter方法?
解决pytubefix中用字符串参数调用filter的问题
你直接传字符串args给filter肯定不行,因为filter需要的是关键字参数(比如progressive=True这种形式),而不是一个字符串。要实现需求,得把字符串转换成关键字参数对应的字典,再用**解包传入。
给你两种可行的方法:
方法1:用ast.literal_eval解析(推荐,支持多参数)
这种方法能处理更复杂的参数字符串(比如同时传progressive=True, res='720p'),而且不用手动处理值的类型:
import ast from pytubefix import YouTube url = "你的YouTube视频链接" args = "progressive=True" # 把字符串转成字典格式的表达式,再解析成字典 kwargs = ast.literal_eval(f"{{{args}}}") # 用**解包字典,把键值对作为关键字参数传入filter streams = YouTube(url).streams.filter(**kwargs)
方法2:手动分割字符串(适合简单单参数场景)
如果你的参数只有一个,也可以手动分割键和值,再处理值的类型:
from pytubefix import YouTube url = "你的YouTube视频链接" args = "progressive=True" # 分割键和值 key, value_str = args.split("=", 1) # 处理布尔值类型,如果是其他类型(比如字符串、数字)可以对应调整 value = value_str.lower() == "true" if value_str.lower() in ["true", "false"] else value_str # 构造关键字参数字典 kwargs = {key: value} # 传入filter streams = YouTube(url).streams.filter(**kwargs)
核心逻辑就是:把字符串形式的参数转换成{参数名: 参数值}的字典,再用**运算符把字典解包成关键字参数,这样就和直接写filter(progressive=True)的效果完全一致了。
内容的提问来源于stack exchange,提问作者reChords
相关产品推荐
相关产品推荐

