【问题标题】:Python split url to find image name and extensionPython拆分url以查找图像名称和扩展名
【发布时间】:2012-05-11 13:20:43
【问题描述】:

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

假设一个 URL 如下所示

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

我将如何获得以下内容。

filename = "da4ca3509a7b11e19e4a12313813ffc0_7"
file_ext = ".jpg"

【问题讨论】:

    标签: python django file-io


    【解决方案1】:
    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))
    

    唯一的缺点是您的文件名将包含前面的 /,您可以随时将其删除。

    【讨论】:

    • 前面的'/'不是唯一的问题,如果url包含其他子目录,它们将保留在文件名中,也许OP想要它们,也许不是;)
    • @Cédric Julien - 感谢您提醒 .basename 仅获取最后一部分,编辑帖子以反映这一点。 :)
    • 这段代码可以处理没有扩展名的文件和像http://server.com/common/image.jpg?xx=345&yy=qwertyBTW这样的url,在3.x中需要使用from urllib.parse import urlparse
    【解决方案2】:

    尝试使用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')
    

    【讨论】:

    • urlparse 现在已移至 python 3 中的 urllib。您的解决方案仍然有效。谢谢。 :)
    【解决方案3】:
    filename = picture_page.split('/')[-1].split('.')[0]
    file_ext = '.'+picture_page.split('.')[-1]
    

    【讨论】:

    • 谢谢!如果没有理由导入额外的库,它会很有用
    【解决方案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 返回一个字符串列表,由/ 分割。 如果您对 python 列表索引非常了解,您就会知道 -1 将为您提供最后一个元素或列表末尾的第一个元素。 在您的情况下,它将是文件名:da4ca3509a7b11e19e4a12313813ffc0_7.jpg

    通过分隔符. 将其拆分,您会得到两个值: da4ca3509a7b11e19e4a12313813ffc0_7jpg,正如预期的那样,因为它们由一个句点分隔,您在 split() 调用中用作分隔符。

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

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

    【讨论】:

    • 虽然您的代码可能(或不)工作,但如果您添加有关问题的简要说明以及您的代码如何解决它,那就太好了。根据help center,它没有提供完整的答案
    • 只要他以文件始终具有扩展名的方式获取文件 url,它将始终有效。他可以在混合中添加一个简单的 if 语句来处理没有扩展名的文件(if len(url.split('/')[-1].split('.'))==1: #No extension; else: #Get filename,ext
    • 请注意我评论的重点不是你的代码是否真的有效。这是关于答案的质量。请注意,由于您已按照建议添加了简短说明,因此您的答案现在更好。为您的编辑 +1 :)
    • 还是谢谢你,这让我的回答变得更好。
    【解决方案5】:

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

       fName, ext = os.path.splitext('yourImage.jpg')
    

    【讨论】:

      【解决方案6】:

      这是使用正则表达式查找图像名称扩展名最简单的方法

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

      【讨论】:

        【解决方案7】:
        >>> 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'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-19
          • 1970-01-01
          • 1970-01-01
          • 2017-02-11
          • 1970-01-01
          相关资源
          最近更新 更多