Python拆分url以查找图像名称和扩展名

Python拆分url以查找图像名称和扩展名,python,django,file-io,Python,Django,File Io,我正在寻找一种使用Python从特定url提取文件名和扩展名的方法 假设URL如下所示 picture_page = "http://distilleryimage2.instagram.com/da4ca3509a7b11e19e4a12313813ffc0_7.jpg" 我将如何着手获得以下信息 filename = "da4ca3509a7b11e19e4a12313813ffc0_7" file_ext = ".jpg" 尝试拆分url,然后检索文件名和扩展名(用于仅保留最后一个文件

我正在寻找一种使用Python从特定url提取文件名和扩展名的方法

假设URL如下所示

picture_page = "http://distilleryimage2.instagram.com/da4ca3509a7b11e19e4a12313813ffc0_7.jpg"
我将如何着手获得以下信息

filename = "da4ca3509a7b11e19e4a12313813ffc0_7"
file_ext = ".jpg"
尝试拆分url,然后检索文件名和扩展名(用于仅保留最后一个文件名):


os.path.splitext
将帮助您在使用
urlparse
从URL提取相关字符串后提取文件名和扩展名:

   fName, ext = os.path.splitext('yourImage.jpg')
唯一的缺点是,您的文件名将包含一个前/项,您可以随时删除它

>>> 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'
当您执行picture_page.split(“/”)时,它将返回url中由
/
拆分的字符串列表。 如果您很了解python列表索引,您就会知道-1将给出列表末尾的最后一个元素或第一个元素。 在您的情况下,它将是文件名:
da4ca3509a7b11e19e4a12313ffc0_7.jpg

通过delimeter
将其拆分,可以得到两个值:
da4ca3509a7b11e19e4a12313ffc0_7
jpg
,正如预期的那样,因为它们之间用一个句点分隔,在split()调用中用作delimeter

现在,由于最后一次拆分在结果列表中返回两个值,因此可以对其进行元组化。 因此,基本上,结果如下:


filename,ext=('da4ca3509a7b11e19e4a12313ffc0_7','jpg')
这是使用正则表达式查找图像名称和扩展名的最简单方法

import re
import sys

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

regex = re.compile('(.*\/(?P<name>\w+)\.(?P<ext>\w+))')

print  regex.search(picture_page).group('name')
print  regex.search(picture_page).group('ext')
重新导入
导入系统
图片_页=”http://distilleryimage2.instagram.com/da4ca3509a7b11e19e4a12313813ffc0_7.jpg"
regex=re.compile('(.*\/(?P\w+)\.(?P\w+)))
打印regex.search(图片页面).group('名称')
打印regex.search(图片页面).group('ext')

前面的“/”不是唯一的问题,如果url包含其他子目录,它们将保留在文件名中,可能OP需要,也可能不需要;)@塞德里克·朱利安-感谢你提醒我。basename只获得最后一部分,编辑了这篇文章以反映这一点。:)此代码可以处理没有扩展名的文件和URL,如
http://server.com/common/image.jpg?xx=345&yy=qwerty
顺便说一句,在3.x中,需要使用urllib.parse中的
导入urlparse
谢谢!如果没有理由导入额外的库,那么它是有用的,而您的代码可能(或不)工作,如果您添加一个关于问题的简要说明以及您的代码是如何解决问题的,那就太好了。照原样,它不会提供完整的答案,因为它将始终有效,前提是他以文件始终具有扩展名的方式获取文件URL。他可以在混合中添加一个简单的if语句来处理没有扩展名的文件(
if len(url.split('/')[-1].split('.'))==1:#无扩展名;其他:#获取文件名,ext
请注意,我的评论的重点不是你的代码是否有效。这是关于答案的质量。请注意,你的答案现在更好了,因为你已经按照建议添加了一个简短的解释。+1用于编辑:)无论如何,谢谢你,这让我的答案变得更好。在python 3中,urlparse现在被移动到urllib。您的解决方案仍然有效。谢谢。:)
try:
    # Python 3
    from urllib.parse import urlparse
except ImportError:
    # Python 2
    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))
>>> 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'
# 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('.'))
import re
import sys

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

regex = re.compile('(.*\/(?P<name>\w+)\.(?P<ext>\w+))')

print  regex.search(picture_page).group('name')
print  regex.search(picture_page).group('ext')