2012-05-11 22 views
9

लगता है मैं किसी खास यूआरएल से एक फ़ाइल नाम और विस्तार अजगरपायथन यूआरएल विभाजित छवि नाम और एक्सटेंशन

का उपयोग कर

मान लीजिए कि एक यूआरएल के रूप में

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

कैसे होगा इस प्रकार लग रहा है निकालने के लिए देख रहा हूँ मैं निम्नलिखित प्राप्त करने के बारे में जाना।

filename = "da4ca3509a7b11e19e4a12313813ffc0_7" 
file_ext = ".jpg" 

उत्तर

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

धन्यवाद! यह उपयोगी हो सकता है अगर अतिरिक्त पुस्तकालयों को आयात करने के कोई कारण नहीं –

11

यूआरएल विभाजित करने के लिए urlparse.urlsplit साथ प्रयास करें, और उसके बाद os.path.splitext फ़ाइल नाम और एक्सटेंशन (os.path.basename का उपयोग केवल पिछले फ़ाइल नाम रखने के लिए) को पुनः प्राप्त करने:

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 अब पायथन 3 में urllib में स्थानांतरित हो गया है। आपका समाधान अभी भी काम करता है। धन्यवाद। :) – kinshuk4

1

os.path.splitext आप फ़ाइल नाम निकालने में मदद मिलेगी और एक्सटेंशन जब आप urlparse:

fName, ext = os.path.splitext('yourImage.jpg') 
का उपयोग कर URL से प्रासंगिक स्ट्रिंग निकालने के बाद विस्तार करें
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)) 

केवल इसके साथ नकारात्मक यह है कि आपके फ़ाइल नाम में एक पूर्ववर्ती/जो आप हमेशा स्वयं को हटा सकते हैं।

+0

+1 अंतर्निहित उपयोग के लिए +1। –

+1

पूर्ववर्ती '/' एकमात्र समस्या नहीं है, अगर यूआरएल में अन्य उपनिर्देशिकाएं हैं, तो उन्हें फ़ाइल नाम में रखा जाएगा, शायद ओपी उन्हें चाहता है, शायद नहीं;) –

+0

@ सेड्रिक जूलियन - प्राप्त करने के लिए .basename के बारे में अनुस्मारक के लिए धन्यवाद सिर्फ अंतिम भाग, इस तरह को प्रतिबिंबित करने के लिए पोस्ट संपादित किया। :) –

-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' यहां जरूरी नहीं है। –

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

जब आप picture_page.split ('/') करते हैं, यह स्ट्रिंग की एक सूची आपके url विभाजित होने से रोकने के लिए एक / से वापस आ जाएगी। यदि आपको पाइथन सूची अनुक्रमण अच्छी तरह से पता है, तो आप जान लेंगे कि -1 आपको अंतिम तत्व या सूची के अंत से पहला तत्व देगा। आपके मामले में, यह फ़ाइल नाम हो जाएगा: da4ca3509a7b11e19e4a12313813ffc0_7.jpg

विभाजन कि delimeter . से, आप दो मूल्यों को प्राप्त: da4ca3509a7b11e19e4a12313813ffc0_7 और jpg, अपेक्षा के अनुरूप है, क्योंकि वे एक अवधि जो आप में एक delimeter के रूप में इस्तेमाल से अलग होते हैं अपने विभाजित() कॉल करें।

अब, चूंकि आखिरी विभाजन परिणामस्वरूप सूची में दो मान देता है, तो आप इसे tuplify कर सकते हैं। इसलिए, मूल रूप से, परिणाम हो की तरह होगा:

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

+1

जबकि आपका कोड काम कर सकता है (या नहीं) यह बहुत अच्छा होगा यदि आप समस्या के बारे में एक संक्षिप्त स्पष्टीकरण जोड़ते हैं और आपका कोड इसे कैसे हल करता है। जैसा कि यह [सहायता केंद्र] के अनुसार एक पूर्ण उत्तर प्रदान नहीं करता है (http://stackoverflow.com/help/how-to-answer) – dic19

+0

यह हमेशा काम करेगा, बशर्ते वह अपनी फ़ाइल यूआरएल को इस तरह से प्राप्त करे हमेशा एक विस्तार है। बिना किसी एक्सटेंशन वाले फाइलों को संभालने के लिए मिश्रण में कथन में एक सरल जोड़ सकता है ('यदि len (url.split ('/') [- 1] .split ('।')) == 1: # कोई विस्तार नहीं; अन्य: # फ़ाइल नाम प्राप्त करें, ext' –

+0

कृपया ध्यान दें कि मेरी टिप्पणी का बिंदु यह नहीं है कि आपका कोड वास्तव में काम करता है या नहीं। यह उत्तर की गुणवत्ता के बारे में है। ध्यान दें कि आपका उत्तर अब बेहतर है क्योंकि आपने सुझाए गए संक्षिप्त विवरण को जोड़ा है। आपके संपादन के लिए +1 :) – dic19

संबंधित मुद्दे