tablas - read text pandas python
¿Cómo verificar el tipo de archivos sin extensiones en python? (7)
Con la biblioteca de subprocesos más nueva, ahora puede usar el siguiente código (solución * nix only):
import subprocess
import shlex
filename = ''your_file''
cmd = shlex.split(''file --mime-type {0}''.format(filename))
result = subprocess.check_output(cmd)
mime_type = result.split()[-1]
print mime_type
Tengo una carpeta llena de archivos y estos no tienen una extensión. ¿Cómo puedo verificar los tipos de archivos? Quiero verificar el tipo de archivo y cambiar el nombre del archivo en consecuencia. Supongamos que una función filetype(x)
devuelve un tipo de archivo como png
. Quiero hacer esto:
files = os.listdir(".")
for f in files:
os.rename(f, f+filetype(f))
¿Cómo hago esto?
En Unix y Linux existe el comando de file
para adivinar tipos de archivos. Incluso hay un puerto de Windows .
Desde la página man :
File prueba cada argumento en un intento de clasificarlo. Hay tres conjuntos de pruebas, realizadas en este orden: pruebas del sistema de archivos, pruebas de números mágicos y pruebas de idiomas. La primera prueba que tiene éxito hace que se imprima el tipo de archivo.
Debería ejecutar el comando de file
con el módulo de subprocess
y luego analizar los resultados para descubrir una extensión.
editar: Ignora mi respuesta. Use la answer Chris Johnson en su lugar.
En el caso de las imágenes, puede usar el módulo imghdr.
>>> import imghdr
>>> imghdr.what(''8e5d7e9d873e2a9db0e31f9dfc11cf47'') # You can pass a file name or a file object as first param. See doc for optional 2nd param.
''png''
Hay bibliotecas de Python que pueden reconocer archivos en función de su contenido (generalmente un número de encabezado / magia) y que no dependen del nombre o la extensión del archivo.
Si se dirige a muchos tipos de archivos diferentes, puede usar python-magic
. Eso es solo un enlace de Python para la biblioteca de magic
bien establecida. Esto tiene una buena reputación y (pequeño endoso) en el uso limitado que he hecho de él, ha sido sólido.
También hay bibliotecas para tipos de archivos más especializados. Por ejemplo, la biblioteca estándar de Python tiene el módulo imghdr
que hace lo mismo solo para los tipos de archivos de imagen.
La biblioteca de python-magic proporciona la funcionalidad que necesita.
Puede instalar la biblioteca con pip install python-magic
y usarla de la siguiente manera:
>>> import magic
>>> magic.from_file(''iceland.jpg'')
''JPEG image data, JFIF standard 1.01''
>>> magic.from_file(''iceland.jpg'', mime=True)
''image/jpeg''
>>> magic.from_file(''greenland.png'')
''PNG image data, 600 x 1000, 8-bit colormap, non-interlaced''
>>> magic.from_file(''greenland.png'', mime=True)
''image/png''
El código de Python en este caso está llamando a libmagic debajo del capó, que es la misma biblioteca utilizada por el comando de file
* NIX. Por lo tanto, esto hace lo mismo que las respuestas basadas en subprocesos / shell, pero sin esa sobrecarga.
También puede instalar el enlace de file
oficial para Python, una biblioteca llamada file-magic
(no usa tipos, como python-magic
).
Está disponible en PyPI como file-magic y en Debian como python-magic . Para mí, esta biblioteca es la mejor para usar, ya que está disponible en PyPI y en Debian (y probablemente en otras distribuciones), facilitando el proceso de implementación de su software. También publiqué sobre cómo usarlo .
import subprocess
p = sub.Popen(''file yourfile.txt'',stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()
print output
Como Steven señaló, el subprocess
es el camino. Puede obtener el comando de salida por el camino anterior como dice esta post