Mostrando entradas con la etiqueta Ejemplos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ejemplos. Mostrar todas las entradas

Encontrar valores repetidos en una tupla

Sencillo ejemplo para encontrar valores repetidos en una tupla:


#/usr/bin/env python
#encoding=utf-8
#Encuentra los valores repetidos de una tupla

lineas1=(1,2,3,4,5,6,7,8,5,4,3,1,12,52,56,555)

unicos=[]
repetidos=[]
for i in lineas1:
    if i not in unicos:
        unicos.append(i)
    else:
        if i not in repetidos:
            repetidos.append(i)

print ('Numero total de valores:'+str(len(lineas1)))
print ('Numero de valores repetidos:'+str(len(repetidos)))
       
print (repetidos)

Validando fichero XML con un DTD

Código para validar fichero XML con un fichero DTD:

from xml.parsers.xmlproc import xmlproc
from xml.parsers.xmlproc import xmlval
from xml.parsers.xmlproc import xmldtd

def validar_xml(xml_fichero, dtd_fichero):
    """Valida un fichero XML con un ficheo DTD.
    Si el fichero XMl no es válido se imprime un
    mensaje de error.
    """
   dtd = xmldtd.load_dtd(dtd_fichero)
   parser = xmlproc.XMLProcessor()
   parser.set_application(xmlval.ValidatingApp(dtd, parser))
   parser.dtd = dtd
   parser.ent = dtd
   parser.parse_resource(xml_fichero)


if __name__ == "__main__":
   import sys
   xml_fichero, dtd_fichero = sys.argv[1], sys.argv[2]
   validar_xml(xml_fichero, dtd_fichero)



Existe una librería ( lxml ) para el manejo de ficheros XML .

Calcular números primos

#/usr/bin/env python
#encoding=utf-8
#calcula los primos menores que MAX
MAX = 100
primos = [2]

for k in range(3, MAX):
  for i in range(len(primos)):   
    if k%primos[i]==0: break
 
  if i==len(primos)-1: #solo si no es multiplo de los actuales primos lo añade
    # al resultado
    primos.append(k)       
print primos

Crear y leer de base de datos BERKELEY.

#!/usr/bin/env python
'''Creamos una base de datos de pruebas y la usamos para una consulta simple.'''
__shell_usage__ = ''' Este es un programa de ejemplo. Solo le debes de pasar como argumento
el nombre del fichero de la base de datos que quieres crear.'''
__version__ = 'Ejemplo de uso del modulo bsddb (Base de datos de Berkeley)'
__author__='Arturo Suelves (arturosa@lycos.es)'
import bsddb #Modulo de base de datos berkeley
import sys,os
def crear_base_datos(fichero):
    db = bsddb.btopen(fichero, 'c')
    for i in range(1000):
        db[str(i)]='Elemento_'+str(i)
    print 'Imprimimos el primer elemento de la base: ',db.first()
    print 'Imprimimos el siguiente elemento de la base: ',db.next()
    db.sync() #Importante: Para sincronizar la base en el disco,osea para grabarla
    db.close
    
def leer_de_la_base_datos(fichero):
    db = bsddb.btopen(fichero, 'r')
    elemento=raw_input('Numero del elemento a buscar: ')
    print db.set_location(elemento)
    db.close
    
if __name__ == '__main__':
    if sys.argv[1] == '--help':
        print __shell_usage__
    else:
        fichero_base_datos=sys.argv[1]
        crear_base_datos(fichero_base_datos)
        leer_de_la_base_datos(fichero_base_datos)
        print 'Programa finalizado.\n'
    sys.exit()

Enviar mensajes a una lista de direcciones

# -*- coding: utf-8 -*-
'''Programa para enviar un mensaje a una lista de direcciones de e-mail.'''

__shell_usage__ ='''Este programa envia un mensaje a una lista de direcciones de e-mail.
El fichero de direcciones debe de tener una direccion de e-mail por linea.
El fichero con el cuerpo del mensaje debe de estar en formato texto.
El puerto de SMTP es el 25.'''
__version__ ='Ejemplo de uso del modulo smtplib (protocolo SMTP)'
__author__='Arturo Suelves (arturosa@lycos.es)'

import smtplib
import sys

def enviar_mensajes_a_lista_de_correo(mail_enviador,asunto,servidorsmtp,puertosmtp):
    
    fichero_con_lista_direcciones=raw_input('Introducir path completo del fichero de direcciones: ')
    
    fichero_con_cuerpo_mensaje=raw_input('Introducir path completo del fichero con el cuerpo del mensaje: ')
    
    
    fichero_con_mensajes_enviados=raw_input('Introducir path completo para fichero log de mensajes enviados: ')
    
    fld=open(fichero_con_lista_direcciones,'r')
    fme=open(fichero_con_mensajes_enviados,'w')
    
    for i in fld.readlines():
        try:
            mensaje = "From: "+mail_enviador+"\nSubject: "+asunto+"\nTo: "+i+"\n"
            fcm=open(fichero_con_cuerpo_mensaje,'r')
            print '\nMensaje para: '+i
    
            for ii in fcm.readlines():
                mensaje=mensaje+ii
                fcm.close()
    
    
            print 'Abierto fichero del cuerpo del mensaje...\n'
            server = smtplib.SMTP(servidorsmtp,int(puertosmtp))
            print '\nImprimiendo la informacion de debug de la conexion con el servidor SMTP.\n'
    
            server.set_debuglevel(1)
    #Esta linea sirve para imprimir informacion de debuger sobre el proceso de enviar los mensajes
            server.sendmail(mail_enviador, i, mensaje)
    
            fme.write('Mensaje enviado a:'+i)
            print 'Mensaje enviado a: '+i
            server.quit()
    
        except:
    
            print 'Error enviando el fichero a: '+ i
            fme.write('Error enviado el fichero a: '+i)
            fld.close()
            fme.close()


if __name__ == '__main__' :

    print '''Uso:
Este programa envia un mensaje a una lista de direcciones de e-mail.
El fichero de direcciones debe de tener una direccion de e-mail por linea.
El fichero con el cuerpo del mensaje debe de estar en formato texto.
El puerto de SMTP estandard es el 25.
'''
    enviador_mensaje=raw_input('Introducir e-mail del enviador: ')
    asunto_mensaje=raw_input('Introducir asunto del mensaje: ')
    servidorsmtp_mensaje=raw_input('Introducir servidor de SMTP: ')
    puertosmtp_mensaje=raw_input('Introducir puerto del SMTP : ')

    enviar_mensajes_a_lista_de_correo(enviador_mensaje,asunto_mensaje,servidorsmtp_mensaje,puertosmtp_mensaje)

    print 'Programa finalizado.\n'
    sys.exit()





Expresiones regulares.Convertir de MAYUSCULAS a minusculas

#!/usr/bin/env python
'''Ejemplo del uso de expresiones regulares en Python.'''
__shell_usage__ = ''' Este es un programa de ejemplo. Busca en fichero HTML dado
como argumento, todas las marcas de html y las pone en minusculas y saca el 
resultado por pantalla.'''
__version__ = 'Ejemplo de uso de expresiones regulares'
__author__='Arturo Suelves (arturosa@lycos.es)'
import os,sys
import string,re
def Mm(fentrada):
    flectura=open(fentrada,'r')
    f=flectura.read()
    flectura.close()
    coincidencias1=re.findall("[\n][^<]*[>]",f)
    #Busca todas las marcas html desde el principio de la linea nueva al final
    coincidencias2=re.findall("[<][^>]*[\n]",f)+
    #Busca todas las marcas html desde el principio de la linea al final de la linea
    coincidencias3=re.findall("[<].*[>]",f)
    #Busca todas las marcas html que van en una linea
    resultado=f
    for i in coincidencias1:
        busca=re.search(i,resultado)
        if busca:
            p1=busca.start()
            p2=busca.end()
            resultado1=resultado[:p1]
            resultado2=resultado[p2:]
            anadido=string.lower(f[p1:p2])
            resultado=resultado1+anadido+resultado2
    for i in coincidencias2:
        busca=re.search(i,resultado)
        if busca:
            p1=busca.start()
            p2=busca.end()
            resultado1=resultado[:p1]
            resultado2=resultado[p2:]
            anadido=string.lower(f[p1:p2])
            resultado=resultado1+anadido+resultado2
    for i in coincidencias3:
        busca=re.search(i,resultado)
        if busca:
            p1=busca.start()
            p2=busca.end()
            resultado1=resultado[:p1]
            resultado2=resultado[p2:]
            anadido=string.lower(f[p1:p2])
            resultado=resultado1+anadido+resultado2 
    return resultado
if __name__ == '__main__':
    if len(sys.argv) == 2:
        if sys.argv[1] <> '':
            print Mm(sys.argv[1])


Crear y leer ficheros ZIP

'''Programa de pruebas para el manejo del modulo zipfile.'''
__shell_usage__ = '''\nAyuda:
Este programa crea un fichero zip con todos los ficheros de un directorio.
Dicho fichero zip se guarda en el mismo directorio.
Uso: pruebaszip [-c] [-l] [--help]
        -c:     crea un zip
        -l:     lista los ficheros de un fichero zip y muestra informacion
        --help: muestra esta pantalla de ayuda
'''
__author__ = 'Arturo Suelves Albert: arturosa@lycos.es'
__version__ = 'Pruebas de ZIP - 20/04/2001'
import zipfile
import os.path
import os,sys
def hacer_zip(ficherozip,directorio_ficheros_a_zipear):
    lista_de_ficheros_a_zipear=os.listdir(directorio_ficheros_a_zipear)
    a=zipfile.ZipFile(ficherozip,'w',8)
    for i in lista_de_ficheros_a_zipear:
        if os.path.isfile(str(directorio_ficheros_a_zipear)+'\\'+str(i)):
            a.write(str(directorio_ficheros_a_zipear)+'\\'+str(i))
            print'.',
    a.close()
def leer_zip(ficherozip):
    a=zipfile.ZipFile(ficherozip,'r')
    #print 'Lista de ficheros incluidos en el zip: ',a.namelist(),'\n'
    #fichero_a_ver=raw_input('Fichero a visualizar: ')
    print a.read(fichero_a_ver)
    for contador in a.namelist():
        print a.read(contador) #esta linea imprime el contenido del fichero
        print '\nNombre del fichero: '+contador
        print 'Ultima modificacion del fichero: '+str(a.getinfo(contador).date_time)
        print 'Sistema que creo el fichero: '+str(a.getinfo(contador).create_system)
        print 'Tamaño comprimido: '+str(a.getinfo(contador).compress_size)
        print 'Tamaño descomprimido: '+str(a.getinfo(contador).file_size)
        print 'Tipo de compresion: '+str(a.getinfo(contador).compress_type)+'\n'
        tecla=raw_input('Pulse ENTER para ver el siguiente documento en el fichero zip.')
    a.close()
 
    
if __name__ == '__main__':
    if len(sys.argv) == 2:
        if sys.argv[1] == '-c':
            directorio_trabajo=raw_input('\nDirectorio con los ficheros a zipear:')
            os.chdir(directorio_trabajo)
            nombre_zip=raw_input('\nNombre del fichero ZIP: ')
            if os.path.isfile(nombre_zip):
                print '\nYa existe un fichero en el directorio con este nombre: '+nombre_zip
                sys.exit()
            else:
                hacer_zip(nombre_zip,directorio_trabajo)
        else:
            if sys.argv[1] == '-l':
                nombre_zip=raw_input('\nPath completo del fichero ZIP: ')
                leer_zip(nombre_zip)
            else:
                    print '\nNombre del programa:',sys.argv[0]
                    print __shell_usage__
                    print __author__
    else:
        print '\nNombre del programa:',sys.argv[0]
        print __shell_usage__
        print __author__
    sys.exit()

Cálculo de números primos. Criva de Erastótenes.

# -*- coding: utf-8 -*-
"""
Criva de Erastótenes.

Calcula los numeros primos entre 0 y uno dado n.
Ver explicación en:
http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes

author : arturo.suelves@gmail.com
fecha : 15-4-2008
version de python: 2.7
"""
import math

n=int(raw_input('Número máximo:'))

lista_numeros=[]

for i in range(0,n):
    lista_numeros.append(i)

print "Lista de numeros original:"
print lista_numeros

seguir=raw_input('Calcular los números primos:')

for i in range(2, int(math.sqrt(n))):
    if lista_numeros[i] <> 'X':
        for j in range(i,n/i):
            lista_numeros[j*i]='X'
print "Lista de números primos entre 0 y "+str(n)+"."            
print lista_numeros

Generar código de registro

#!/usr/bin/env python

'''Ejemplo de generación de un código de registro muy simple.
Multiplica la suma de los ordinales de cada letra de la empresa por 250'''
 
__author__='Arturo Suelves (arturo.suelves@gmail.com)'

import os,sys
  
print ('Generando codigo de registro para programa del cliente.')
empresa=input('Introduzca nombre EMPRESA (8 caracteres): ')
codigo=0
for cuenta in range(1,8):
    codigo= codigo+ord(empresa[cuenta])
codigo=codigo*250
print ('El codigo de registro para '+empresa+' es : B'+str(codigo))
salida=input('Pulse una tecla para salir.')