2016-07-22 4 views
0

У меня здесь странная проблема. У меня есть список Youtube URL-адреса в текстовом файле, это не нормальный URLs YT, хотя, как я считаю, что они были спасены от мобильного устройства и, таким образом, все они, как этогоОперация Strip удаляет символ из URL-адреса, если он не должен быть

https://youtu.be/A6RXqx_QtKQ

Я хочу, чтобы загрузить звук из всех этих адресов с YouTube-DL для Python, так что все мне нужно, это 11 значный идентификатор так, чтобы получить, что я раздели все остальное из URLs так:

playlist_url = [] 

f = open('my_songs.txt', 'r') 

for line in f: 
    playlist_url.append(line.strip('https://youtu.be/')) 

это работает отлично для почти всех URL-адреса, кроме тех, которые начинаются с «o» в 11-значном идентификаторе, например это один

https://youtu.be/o5kO4y87Gew

«о» в начале цифры не были бы там, а затем с YouTube дл бы прекратить работу заявив, что не может найти правильный URL или 11-значный идентификатор, необходимый для продолжения. Поэтому я вернулся и распечатал все URL-адреса в «playlist_url», а для двух URL-адресов с «o» в начале «o» удаляется, оставляя их всего 10 цифр. Тем не менее, все остальные URL-адреса удалены.

Почему это происходит?

+1

Чтобы получить последние 11 символов, просто используйте 'url [-11:]' –

ответ

2

strip работает правильно. Он удаляет любой из символов в аргументе из начала или конца строки. В аргументе есть «o», поэтому, если в начале кода есть «o», он, конечно же, будет удален.

Попробуйте вместо этого:

if line.startswih("https://youtu.be/"): 
    playlist_url.append(line[17:]) 
+0

Я всегда думал, что он просто лишил всю строку, спасибо! –

2

В соответствии с documentation, strip() удаляет комбинацию всех символов, указанных в качестве параметра. Потому что есть o в youtu.be, который также удаляется.

Следовательно, strip() - это не тот подходящий инструмент для работы; учитывая, что мы знаем длину префикса, просто удалите соответствующее количество символов с начала строки:

line = 'https://youtu.be/o5kO4y87Gew' 
line[17:] 
=> 'o5kO4y87Gew' 
2

Собираясь выбросить другое решение, это хорошее место для str.rpartition.

'https://youtu.be/o5kO4y87Gew'.rpartition('/') 
# ('https://youtu.be', '/', 'o5kO4y87Gew') 

'https://youtu.be/o5kO4y87Gew'.rpartition('/')[-1] 
# 'o5kO4y87Gew' 
3

youtube-dl имеет дело с целыми URL-адресами. Вы можете проверить это в командной строке с youtube-dl https://youtu.be/A6RXqx_QtKQ --list-extractor, что показывает, что будет использоваться правильный экстрактор youtube. Нет необходимости в какой-либо снятии URL-адресов, которые уже присутствуют.

+0

ОК спасибо, я попробую, я получал ошибки, перед которыми я думал, был связан с URL-адресами –

 Смежные вопросы

  • Нет связанных вопросов^_^