剥离操作是在不应该的时候从URL中删除字符

时间:2016-07-22 03:37:30

标签: python strip youtube-dl

我这里有一个奇怪的问题。我有一个txt文件中的Youtube网址列表,这些不是正常的YT网址,但我相信它们是从移动设备保存的,因此它们都是这样的

https://youtu.be/A6RXqx_QtKQ

我想用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中,例如这一个

https://youtu.be/o5kO4y87Gew

' o'在数字的开头不会出现,然后youtube-dl将停止工作,说它无法找到继续需要的正确网址或11位数ID。所以我回去打印出所有的网址> playlist_url'对于两个带有' o'在开始时' o'被剥离出来只留下10位数字。所有其他网址都被删除了。

为什么会这样?

4 个答案:

答案 0 :(得分:3)

youtube-dl处理整个网址就好了。您可以在命令行上使用youtube-dl https://youtu.be/A6RXqx_QtKQ --list-extractor进行检查,这表明将使用正确的提取器youtube。无需删除已存在的URL。

答案 1 :(得分:2)

根据documentationstrip()删除指定为参数的所有字符的组合。因为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'