2016-07-22 5 views
0

여기에 이상한 점이 있습니다. 나는이 아닌 일반 YT URL이 있습니다, TXT 파일에 유튜브 URL 목록이 나는 그들이 모바일 장치에서 저장되고, 따라서 받았다고 생각으로하지만 그들은 내가 다운로드 할이스트립 작업으로 인해 URL이 문자가 제거되지 않아야합니다.

https://youtu.be/A6RXqx_QtKQ

같은 모든입니다

playlist_url = [] 

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

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

이 거의 모두 잘 작동 : 파이썬-DL 유튜브와 모든 URL의 오디오가 그래서 필요한 모든 그래서 나는 이렇게 같이 URL의 다른 모든 것들을 제거 것을 얻기 위해 11 자리 ID입니다 11 자리의 ID에서 'o'로 시작하는 URL을 제외한 URL 숫자의 시작이 하나

https://youtu.be/o5kO4y87Gew

'O'는 없을 것이다 다음 유튜브-DL은 적절한 URL 또는 계속하는 데 필요한 11 자리 ID를 찾을 수 없습니다라고 작동하지 않을 것입니다. 그래서 나는 다시 가서 'playlist_url'에있는 모든 URL을 인쇄하고 시작 부분에 'o'가있는 두 개의 URL에 대해 '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()은 매개 변수로 지정된 모든 문자의 조합 을 제거합니다. youtu.be에도 o이있어 삭제됩니다.

따라서 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

OK 덕분에, 나는 그것을 시도 할 것이다, 나는 내가 URL과 관련 있다고 생각하기 전에 오류를 얻고 있었다. –