2012-05-11 55 views
9

szukam sposobu, aby wyodrębnić nazwę pliku i rozszerzenie z określonego adresu URL przy użyciu PythonPython podzielić URL, aby znaleźć nazwę obrazu i rozszerzenie

powiedzmy URL wygląda następująco

picture_page = "http://distilleryimage2.instagram.com/da4ca3509a7b11e19e4a12313813ffc0_7.jpg" 

jaki sposób Chodzi o uzyskanie następujących.

filename = "da4ca3509a7b11e19e4a12313813ffc0_7" 
file_ext = ".jpg" 

Odpowiedz

10
filename = picture_page.split('/')[-1].split('.')[0] 
file_ext = '.'+picture_page.split('.')[-1] 
+0

dziękuję! Może być przydatny, jeśli nie ma powodu do importowania dodatkowych bibliotek. –

11

Spróbuj z urlparse.urlsplit podzielić URL, a następnie os.path.splitext do pobierania pliku i rozszerzenie (używanie os.path.basename zachować tylko ostatni filename):

import urlparse 
import os.path 

picture_page = "http://distilleryimage2.instagram.com/da4ca3509a7b11e19e4a12313813ffc0_7.jpg" 

print os.path.splitext(os.path.basename(urlparse.urlsplit(picture_page).path)) 

>>> ('da4ca3509a7b11e19e4a12313813ffc0_7', '.jpg') 
+0

urlparse jest teraz przenoszony do urllib w Pythonie 3. Twoje rozwiązanie wciąż działa. Dzięki. :) – kinshuk4

1

os.path.splitext pomogą wyodrębnić pliku i rozszerzenie po wyodrębnieniu odpowiedniego ciągu z adresu URL za pomocą urlparse:

fName, ext = os.path.splitext('yourImage.jpg') 
29
from urlparse import urlparse 
from os.path import splitext, basename 

picture_page = "http://distilleryimage2.instagram.com/da4ca3509a7b11e19e4a12313813ffc0_7.jpg" 
disassembled = urlparse(picture_page) 
filename, file_ext = splitext(basename(disassembled.path)) 

Jedynym minusem jest to, że nazwa pliku będzie zawierała poprzednie/które zawsze można usunąć samodzielnie.

+0

+1 za korzystanie z wbudowanych. –

+1

poprzednie "/" nie jest jedynym problemem, jeśli URL zawiera inne podkatalogi, będą one przechowywane w nazwie pliku, może OP chce je, może nie;) –

+0

@ Cédric Julien - Dzięki za przypomnienie o .basename, aby uzyskać tylko ostatnia część, edytował post, aby to odzwierciedlić. :) –

-2
>>> import re 
>>> s = 'picture_page = "http://distilleryimage2.instagram.com/da4ca3509a7b11e19e4a12313813ffc0_7.jpg"' 
>>> re.findall(r'\/([a-zA-Z0-9_]*)\.[a-zA-Z]*\"$',s)[0] 
'da4ca3509a7b11e19e4a12313813ffc0_7' 
>>> re.findall(r'([a-zA-Z]*)\"$',s)[0] 
'jpg' 
+1

're' nie jest tutaj konieczne. –

4
# Here's your link: 
picture_page = "http://distilleryimage2.instagram.com/da4ca3509a7b11e19e4a12313813ffc0_7.jpg" 

#Here's your filename and ext: 
filename, ext = (picture_page.split('/')[-1].split('.')) 

Kiedy robisz picture_page.split ('/'), zwróci listę ciągów z url rozłamu przez /. Jeśli znasz dobrze indeksowanie listy Pythona, to wiesz, że -1 da ci ostatni element lub pierwszy element na końcu listy. W twoim przypadku będzie to nazwa pliku: da4ca3509a7b11e19e4a12313813ffc0_7.jpg

Dzielenie że separatorem ., masz dwie wartości: da4ca3509a7b11e19e4a12313813ffc0_7 i jpg, zgodnie z oczekiwaniami, ponieważ są one oddzielone przez okres, który został użyty jako separatorem w twojej split().

Teraz, ponieważ ostatni podział zwraca dwie wartości na liście wynikowej, możesz go zatopić. Stąd, w zasadzie, to wynik byłby podobny:

filename,ext = ('da4ca3509a7b11e19e4a12313813ffc0_7', 'jpg')

+1

Chociaż kod może (lub nie) działać, byłoby wspaniale, gdyby dodać krótkie wyjaśnienie na temat problemu i w jaki sposób twój kod go rozwiązuje. Ponieważ nie zapewnia pełnej odpowiedzi zgodnie z [centrum pomocy] (http://stackoverflow.com/help/how-to-answer) – dic19

+0

To zawsze zadziała, pod warunkiem, że uzyska adresy URL plików w taki sposób, aby plik zawsze ma rozszerzenie. Mógłby dodać proste polecenie if w miksie do obsługi plików bez rozszerzeń ('if len (url.split ('/') [- 1] .split ('.')) == 1: # Brak rozszerzenia; else: # Pobierz nazwę pliku, ext' –

+0

Uwaga: punkt mojego komentarza nie jest, jeśli twój kod faktycznie działa, a nie działa. Chodzi o jakość odpowiedzi. Zauważ, że twoja odpowiedź jest teraz lepsza, ponieważ dodałeś krótkie wyjaśnienie zgodnie z sugestią. +1 dla twojej edycji :) – dic19

Powiązane problemy