2012-05-11 11 views
9

Sto cercando un modo per estrarre un nome di file e l'estensione da un particolare URL utilizzando PythonPython diviso url per trovare nome dell'immagine e l'estensione

consente di dire un URL appare come segue

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

Come sarebbe Vado su come ottenere il seguente.

filename = "da4ca3509a7b11e19e4a12313813ffc0_7" 
file_ext = ".jpg" 

risposta

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

grazie! Può essere utile se non vi sono motivi per importare librerie aggiuntive –

11

Prova con urlparse.urlsplit dividere URL, e poi os.path.splitext per recuperare il nome del file e l'estensione (utilizzare os.path.basename per mantenere solo l'ultimo nome del file):

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 viene ora spostato in urllib in python 3. La soluzione continua a funzionare. Grazie. :) – kinshuk4

1

os.path.splitext vi aiuterà a estrarre il nome del file ed estensione dopo aver estratto la stringa pertinente dall'URL utilizzando 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)) 

L'unico svantaggio di questo è che il nome del file conterrà un precedente/che puoi sempre rimuovere da solo.

+0

+1 per l'utilizzo di built-in. –

+1

il precedente '/' non è l'unico problema, se l'url contiene altre sottodirectory, saranno conservati nel nome del file, forse OP li vuole, forse no;) –

+0

@ Cédric Julien - Grazie per il promemoria su .basename per ottenere solo l'ultima parte, modificato il post per riflettere così. :) –

-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' non è necessario qui. –

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('.')) 

Quando si esegue picture_page.split ('/'), che restituirà un elenco di stringhe dal tuo URL divisa da un /. Se conoscete bene l'indicizzazione delle liste python, saprete che -1 vi darà l'ultimo elemento o il primo elemento dalla fine dell'elenco. Nel tuo caso, sarà il nome del file: da4ca3509a7b11e19e4a12313813ffc0_7.jpg

Splitting che delimeter ., si ottengono due valori: da4ca3509a7b11e19e4a12313813ffc0_7 e jpg, come previsto, perché sono separati da un periodo che è stato utilizzato come un delimitatore nella vostra split() call.

Ora, poiché l'ultima divisione restituisce due valori nell'elenco risultante, è possibile moltiplicarlo. Quindi, in sostanza, il risultato sarebbe come:

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

+1

Anche se il tuo codice potrebbe funzionare (o no), sarebbe fantastico se aggiungessi una breve spiegazione sul problema e come risolvesse il tuo codice. Come non fornisce una risposta completa in base a [Centro assistenza] (http://stackoverflow.com/help/how-to-answer) – dic19

+0

Funzionerà sempre, a condizione che ottenga i suoi file URL in modo che il file ha sempre un'estensione Poteva aggiungere una semplice istruzione if nel mix per gestire i file senza estensioni ('if len (url.split ('/') [- 1] .split ('.')) == 1: #Nessuna estensione; else: # Getet filename, ext' –

+0

Si prega di notare che il punto del mio commento non è se il tuo codice funziona o no. Riguarda la qualità della risposta. Nota che la tua risposta è migliore ora dato che hai aggiunto una breve spiegazione come suggerito. +1 per la tua modifica :) – dic19

Problemi correlati