【问题标题】:How to slice strings backwards python如何向后切片字符串python
【发布时间】:2015-10-05 07:56:06
【问题描述】:

我正在学习 python,我制作了一个基本程序,用户获取照片的链接并输入它,然后程序下载该照片。为了确保用户不会输入网页链接而不是照片,我让程序使用字符串切片检查文件扩展名,但我似乎无法找到如何切片字符串向后

我知道这是一个愚蠢的问题,但经过一个小时的搜索,我仍然找不到答案。这是代码

import random
import urllib.request
import urllib.parse

def download_web_image(url, file_format):
    try:
        name = random.randrange(1, 1000)
        full_name = str(name) + file_format
        urllib.request.urlretrieve(url, full_name)
        print("Image download successful!")
        print("Image named " + full_name)
    except:
        print('Error')


def get_user_url():
    url = input("Now enter the url of the photo you want to download:")
    try:

        if url[0:3:-1] is '.png':
            download_web_image(url, ".png")
        elif url[0:4:-1] is 'gepj.':
            download_web_image(url, '.jpeg')
        elif url[0:3:-1] is '.gpj':
            download_web_image(url, '.jpg')
        else:
            print('the file format is uncompatible: ' + url[1:4:-1])

    except:
        print('The url is not valid!')

print('look for an image on a website, make sure it is a JPG or PNG file or it will not work!')
get_user_url()

感谢您的帮助。不,我不希望字符串向后显示。

【问题讨论】:

  • 与其查看文件扩展名(可能会产生误导或不存在),不如获取页面(或至少查看标题,通过 HTTP HEAD)会更好。 Content-type 是您应该关注的。
  • 另见python字符串上的endswith方法:"filename.png".endswith(".png")
  • 相关:stackoverflow.com/questions/509211/…(是的,我知道它是标记列表,但字符串是一样的)
  • 如果你想检查扩展,os.path.splitext 可能就是你要找的。​​span>

标签: python string reverse slice file-extension


【解决方案1】:

我建议你使用内置方法endswith省去了可变大小扩展的麻烦(png,jpeg,jpg...等),这样:

>>>url = 'https://www.python.org/static/community_logos/python-logo-master-v3-TM.png'
>>>url.endswith('.png')
True

【讨论】:

  • 虽然我很迂腐,但我会使用“.png”而不是“png”。考虑一个没有扩展名的文件名“foobarpng”。
【解决方案2】:

你想要的是按负数索引,从列表/字符串的末尾开始搜索:

extension = url[-3:] 将检索 url 中的最后 3 个字符。

url[-1]url 的最后一个字符,url[-2] 是倒数第二个,以此类推。所以url[-3:] 获取从倒数第三个字符到字符串结尾的所有内容。

【讨论】:

    【解决方案3】:

    以下类型的方法可能更容易遵循:

    def get_user_url():
        url = input("Now enter the url of the photo you want to download: ")
    
        try:
            extension = os.path.splitext(url.lower())[1]
    
            if extension in [".png", ".jpeg", ".jpg"]:
                download_web_image(url, extension)
            else:
                print('the file format is uncompatible: {:}'.format(extension))
    
        except:
            print('The url is not valid!')
    

    我建议您也将输入转换为小写,以便您可以同时捕获“.JPG”。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2016-08-29
      • 2014-07-21
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多