我这里有一个奇怪的问题。我有一个txt文件中的Youtube网址列表,这些不是正常的YT网址,但我相信它们是从移动设备保存的,因此它们都是这样的
我想用youtube-dl为所有这些网址下载所有这些网址的音频,所以我需要的是11位数字,以便获取我已经从网址中删除了所有其他网址:
playlist_url = []
f = open('my_songs.txt', 'r')
for line in f:
playlist_url.append(line.strip('https://youtu.be/'))
除了任何以#&o;在11位数的id中,例如这一个
' o'在数字的开头不会出现,然后youtube-dl将停止工作,说它无法找到继续需要的正确网址或11位数ID。所以我回去打印出所有的网址> playlist_url'对于两个带有' o'在开始时' o'被剥离出来只留下10位数字。所有其他网址都被删除了。
为什么会这样?
答案 0 :(得分:3)
youtube-dl处理整个网址就好了。您可以在命令行上使用youtube-dl https://youtu.be/A6RXqx_QtKQ --list-extractor
进行检查,这表明将使用正确的提取器youtube
。无需删除已存在的URL。
答案 1 :(得分:2)
根据documentation,strip()
删除指定为参数的所有字符的组合。因为o
中的youtu.be
也会被删除。
因此strip()
不适合这项工作;鉴于我们知道前缀的长度,只需从字符串的开头删除适当数量的字符:
line = 'https://youtu.be/o5kO4y87Gew'
line[17:]
=> 'o5kO4y87Gew'
答案 2 :(得分:2)
strip
工作正常。它从字符串的开头或结尾删除参数中的任何字符。有一个" o"在论证中如果有一个" o"在代码的开头,它当然会被删除。
请改为尝试:
if line.startswih("https://youtu.be/"):
playlist_url.append(line[17:])
答案 3 :(得分:2)
要抛出另一个解决方案,这是str.rpartition
的好地方。
'https://youtu.be/o5kO4y87Gew'.rpartition('/')
# ('https://youtu.be', '/', 'o5kO4y87Gew')
'https://youtu.be/o5kO4y87Gew'.rpartition('/')[-1]
# 'o5kO4y87Gew'