Pregunta Python, tratando de obtener la extensión de archivo a través de URL


Estoy haciendo un captador de imágenes para el servicio de puush; sin embargo, cada vez que genero una URL aleatoria e intento verificarla como una imagen .PNG, se genera un error. Acabo de retomar el lenguaje Python el día de hoy, ¡así que podrías decir que soy muy nuevo en esto!

El error que se genera:

Traceback (most recent call last):
  File "run.py", line 19, in <module>
    extension = guess_extension(guess_type(url))
  File "C:\Python33\lib\mimetypes.py", line 320, in guess_extension
    return _db.guess_extension(type, strict)
  File "C:\Python33\lib\mimetypes.py", line 189, in guess_extension
    extensions = self.guess_all_extensions(type, strict)
  File "C:\Python33\lib\mimetypes.py", line 168, in guess_all_extensions
    type = type.lower()
AttributeError: 'tuple' object has no attribute 'lower'

El código que se ejecuta:

#!/usr/bin/env python
import sys
import urllib
from mimetypes import guess_type, guess_extension
from random import choice

randoms = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
           'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',' J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
           '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];

downloads = 1;

#the number of files we want to download
target = int(sys.argv[1]);

while downloads <= target:
    string = choice(randoms)+choice(randoms)+choice(randoms)+choice(randoms)+choice(randoms)
    url = 'http://puu.sh/'+string

    print(str(downloads)+': '+string)

    #download
    extension = guess_extension(guess_type(url))
    print(extension)

    #urllib.request('http://puu.sh/'+string, string+'.png')
    downloads += 1

¿Alguna idea sobre lo que este error intenta decirme? Gracias.


5
2017-07-22 06:45


origen


Respuestas:


guess_type () devuelve una tupla (type,encoding), mientras que guess_extension() acepta un solo argumento type.

La línea

extension = guess_extension(guess_type(url))

llamadas guess_type y luego pasa su valor de retorno (tupla) a guess_extension. Solo debes pasar el primer elemento de la tupla (type)

extension = guess_extension(guess_type(url)[0])

6
2017-07-22 06:49



Permítame sugerirlo en el futuro, cuando encuentre problemas como este, usted print cualquier variable que te cause dolor

Así que en tu caso ahora mismo, si lo hicieras. print (type) Python te hubiera dado la tupla y hubieras podido ver si la URL que estabas buscando estaba ahí y luego hecha type = type[0].lower()


1
2017-07-22 06:59