2012-05-11 68 views
9

我正在尋找一種方法來提取使用PythonPython的分裂網址找到圖像名和擴展名

可以說,一個URL看起來如下

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

如何從一個特定的URL的文件名和擴展名我開始獲得以下內容。

filename = "da4ca3509a7b11e19e4a12313813ffc0_7" 
file_ext = ".jpg" 

回答

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

謝謝!如果沒有理由導入額外的庫,它可以是有用的 –

11

urlparse.urlsplit嘗試拆分URL,然後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現在被移動到python 3中的urllib。您的解決方案仍然有效。謝謝。 :) – kinshuk4

1

os.path.splitext會幫你解壓的文件名一旦你從URL中提取相關字符串使用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)) 

唯一不足的是,您的文件名將包含前面的/您可以隨時刪除自己。

+0

+1使用內置。 –

+1

前面的'/'不是唯一的問題,如果url包含其他子目錄,它們將保存在文件名中,也許OP想要它們,也許不是;) –

+0

@CédricJulien - 感謝提醒.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( '/'),它會通過一個/返回從您的網址分割字符串列表。 如果你知道python list indexing,你會知道-1會給你最後一個元素或列表末尾的第一個元素。 你的情況,這將是文件名:da4ca3509a7b11e19e4a12313813ffc0_7.jpg

拆分,通過分隔符.,你會得到兩個值: da4ca3509a7b11e19e4a12313813ffc0_7jpg,符合市場預期,因爲它們是由你作爲一個分隔符句點分隔的split()調用。

現在,由於上一次拆分在結果列表中返回兩個值,因此可以對其進行簡化。 因此,基本上,結果會是這樣:

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

+1

雖然您的代碼可能(或不可以)工作,但如果您添加關於該問題的簡要說明以及代碼如何解決問題,那將會很不錯。正如它不提供根據[幫助中心]的完整答案(http://stackoverflow.com/help/how-to-answer) – dic19

+0

它將始終工作,只要他以文件的方式獲取他的文件URL總是有一個擴展名。他可以在混音中添加一個簡單的if語句來處理沒有擴展名的文件('if len(url.split('/')[ - 1] .split(')。'))== 1:#No extension; else:#Get filename,ext' –

+0

請注意,如果你的代碼實際工作或不工作,我的評論就不是這樣。這關乎答案的質量。請注意,現在您的答案會更好,因爲您已按照建議添加了簡要解釋。 +1爲你編輯:) – dic19

相關問題