[Python] Identificador de tipos de archivo

Iniciado por khyv123, Julio 20, 2011, 02:00:52 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 20, 2011, 02:00:52 PM Ultima modificación: Julio 23, 2011, 01:43:28 PM por khyv123
Este code sirve para identificar el tipo de un archivo en caso de que no se sepa la extensión del mismo). Soporta los siguientes tipos:

- Archivos de imagen: 'rgb', 'gif', 'pbm', 'pgm', 'ppm', 'tiff', 'rast', 'xbm', 'jpeg', 'bmp' y 'png'.
- Archivos de audio: 'aifc', 'aiff', 'au', 'hcom', 'sndr', 'sndt', 'voc', 'wav', '8svx', 'sb', 'ub' y 'ul'.
- Archivos comprimidos: 'zip' y 'tar'.
- Archivos de texto plano

Código: python

# ******************************************
#     Autor : khyv123 
#     Fecha de creacion : 20/07/11
#     Creado para : www.underc0de.org
# ******************************************

import imghdr,sndhdr
from zipfile import is_zipfile
from tarfile import is_tarfile
from sys import argv,exit
from os import path,rename

def options():
print '\nSintaxis: fileID.py -f (nombre_archivo) [-c]'
print '\n\t-f archivo\t\tArchivo a comprobar.'
print '\t-c\t\t\tCambiar extensiones reconocidas.'

if len(argv)>=2:

des=ext=file=''
ch_ext = False

for opt in argv[1:]:
if opt.lower()=='-f':
file=argv[int(argv[1:].index(opt))+2]
elif opt.lower()=='-c':
ch_ext= True

if file=='':
exit('\nArchivo no especificado.')
elif not path.exists(file):
exit('\nArchivo no encontrado.')

if imghdr.what(file)!=None:
ext=imghdr.what(file)
des=imghdr.what(file)+' (Archivo de imagen)'
elif sndhdr.what(file)!=None:
ext=sndhdr.what(file)[0]
des=sndhdr.what(file)[0]+' (Archivo de audio)'
elif is_zipfile(file)=='True':
ext='zip'
des='zip'+' (Archivo comprimido)'
elif is_tarfile(file)=='True':
ext='tar'
des='tar'+' (Archivo comprimido)'
else:
data = open(file,'r').read(512)
char=map(chr,range(32,127))+list('\n\t\r\x08')
if data!='':
if [elem for elem in data if not elem in char]==[]: des='Archivo de texto plano.'
else:
des='Archivo vacio.'


if des!='':
if ch_ext==True and ext!='':
if file.count('.')!=0:
rename(file,file[0:file.find('.')+1]+ext)
else:
rename(file,file+'.'+ext)
exit('\n ' + des)
else:
exit('\nTipo de archivo no reconocido.')
else:
options()




Ejemplo de uso:
Código: php

>> D:\> fileID.py -f (nombre_archivo) [-c]
jpg (Archivo de imagen)


-f -> Archivo a comprobar.
-c -> Cambiar extensiones reconocidas.

Muy interesante y nunca antes visto, al menos por mi.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta