verificar una txt todos saber nombre manejo los linea leer importar existencia existe especifica directorio como carpetas archivos archivo python mime

una - manejo de archivos y carpetas en python



¿Cómo encontrar el tipo de mimo de un archivo en python? (14)

El módulo mimetypes en la biblioteca estándar determinará / adivinará el tipo MIME desde una extensión de archivo.

Si los usuarios están cargando archivos, la publicación HTTP contendrá el tipo MIME del archivo junto con los datos. Por ejemplo, Django hace que estos datos estén disponibles como un atributo del objeto UploadedFile .

Digamos que quieres guardar un montón de archivos en alguna parte, por ejemplo en BLOB. Supongamos que desea distribuir estos archivos a través de una página web y hacer que el cliente abra automáticamente la aplicación / el visualizador correctos.

Suposición: el navegador determina qué aplicación / visor usará el encabezado tipo mime (¿tipo de contenido?) En la respuesta HTTP.

En función de esa suposición, además de los bytes del archivo, también desea guardar el tipo MIME.

¿Cómo encontrarías el tipo MIME de un archivo? Actualmente estoy en una Mac, pero esto también debería funcionar en Windows.

¿Agrega el navegador esta información cuando publica el archivo en la página web?

¿Hay una buena biblioteca de Python para encontrar esta información? ¿Un servicio web o (incluso mejor) una base de datos descargable?


El método de @toivotuo funcionó mejor y más confiablemente para mí en python3. Mi objetivo era identificar archivos comprimidos que no tienen una extensión .gz confiable. Instalé python3-magic.

import magic filename = "./datasets/test" def file_mime_type(filename): m = magic.open(magic.MAGIC_MIME) m.load() return(m.file(filename)) print(file_mime_type(filename))

para un archivo comprimido, devuelve: application / gzip; charset = binario

para un archivo txt descomprimido (datos iostat): text / plain; charset = us-ascii

para un archivo tar: application / x-tar; charset = binario

para un archivo bz2: application / x-bzip2; charset = binario

y por último pero no menos importante para mí, un archivo .zip: application / zip; charset = binario


El método de la magia de pitón sugerido por toivotuo está desactualizado. Python-magic''s tronco actual de Python-magic''s está en Github y, según el léame allí, al encontrar el tipo MIME, se hace así.

# For MIME types >>> import magic >>> mime = magic.Magic(mime=True) >>> mime.from_file("testdata/test.pdf") ''application/pdf'' >>>


El módulo mimetypes solo reconoce un tipo de archivo basado en la extensión de archivo. Si intenta recuperar un tipo de archivo de un archivo sin extensión, los mimetypes no funcionarán.


En Python 3.xy webapp con url al archivo que no podría tener una extensión o una extensión falsa. Deberías instalar python-magic, usando

pip3 install python-magic

Para Mac OS X, también debe instalar libmagic usando

brew install libmagic

Fragmento de código

import urllib import magic from urllib.request import urlopen url = "http://...url to the file ..." request = urllib.request.Request(url) response = urlopen(request) mime_type = magic.from_buffer(response.readline()) print(mime_type)

alternativamente, puede poner un tamaño en la lectura

import urllib import magic from urllib.request import urlopen url = "http://...url to the file ..." request = urllib.request.Request(url) response = urlopen(request) mime_type = magic.from_buffer(response.read(128)) print(mime_type)


Esto parece ser muy fácil

>>> from mimetypes import MimeTypes >>> import urllib >>> mime = MimeTypes() >>> url = urllib.pathname2url(''Upload.xml'') >>> mime_type = mime.guess_type(url) >>> print mime_type (''application/xml'', None)

Por favor, consulte la publicación anterior



Hay 3 bibliotecas diferentes que envuelven libmagic.

2 de ellos están disponibles en pypi (por lo que la instalación de pip funcionará):

  • archivomagic
  • python-magic

Y otra, similar a la magia de pitón está disponible directamente en las últimas fuentes de libmagic, y es la que probablemente tenga en su distribución de Linux.

En Debian el paquete python-magic es sobre este y se usa como toivotuo, y no está obsoleto como dijo Simon Zimmermann (en mi humilde opinión).

Me parece otra toma (por el autor original de libmagic).

Lástima que no está disponible directamente en pypi.


He intentado muchos ejemplos, pero con Django mutagen juega muy bien.

Ejemplo que comprueba si los archivos son mp3

from mutagen.mp3 import MP3, HeaderNotFoundError try: audio = MP3(file) except HeaderNotFoundError: raise ValidationError(''This file should be mp3'')

La desventaja es que su capacidad para verificar los tipos de archivos es limitada, pero es una gran manera si desea no solo verificar el tipo de archivo sino también acceder a información adicional.


No mencionaste qué servidor web estabas usando, pero Apache tiene un pequeño y agradable módulo llamado Mime Magic que usa para determinar el tipo de archivo cuando se te dice que lo haga. Lee parte del contenido del archivo e intenta averiguar qué tipo está basado en los caracteres encontrados. Y como mencionó Dave Webb, el Módulo MimeTypes en python funcionará, siempre que una extensión sea útil.

Alternativamente, si está sentado en una caja de UNIX, puede usar sys.popen(''file -i '' + fileName, mode=''r'') para tomar el tipo MIME. Windows debe tener un comando equivalente, pero no estoy seguro de qué se trata.


Una forma más confiable que usar la biblioteca de tipos de mimet sería usar el paquete python-magic.

import magic m = magic.open(magic.MAGIC_MIME) m.load() m.file("/tmp/document.pdf")

Esto sería equivalente a usar el archivo (1).

En Django también se puede asegurar que el tipo MIME coincida con el de UploadedFile.content_type.


en python 2.6:

mime = subprocess.Popen("/usr/bin/file --mime PATH", shell=True, / stdout=subprocess.PIPE).communicate()[0]


puedes usar el módulo imghdr Python.


Actualización 2017

No es necesario ir a github, está en PyPi con un nombre diferente:

pip3 install --user python-magic # or: sudo apt install python3-magic # Ubuntu distro package

El código se puede simplificar también:

>>> import magic >>> magic.from_file(''/tmp/img_3304.jpg'', mime=True) ''image/jpeg''