Operaciones

Multiplicacion

3*2

Division

3/2

Resto

3%2

Potencia

3**2

Suma

n = 3
n+3 # Nos daria 6.

TUPLAS

Son parecidas a las listas, pero son inmutables. Se usan para asegurarse que los datos no se pueden modificar. Para buscar un elemento y saber su posicion:

tupla = (1,2,3,"Hola",5)
tupla.index(2) #nos devuelve 1
tupla.index('Hola') #nos devuelve 3
tupla.count(2) #Devuelve 1 porque solo hay un 2.
videodata = tuple(["Introduccion",25,100,3])
videotitle, runningtime, upvotes, downvotes = videodata #videotitle sera intruduccion, runningtime sera 25....

DICCIONARIOS

Se encuentra identificados con una clave unica. Los diccionarios son colecciones desordenadas.

vacio = {} # Crea un diccionario vacio.
colores = {'amarillo':'yellow','azul':'blue'}
colores['amarillo'] #Devuelve yellow 
colores['amarillo'] = 'blanco' #Cambia el valor de amarillo.
del(colores['amarillo']) #Borra la llave amarillo
colores.keys() #Devuelve las claves.
colores.values() #Devuelve los valores.
edades = {'Hector':28, 'Juan':45}
for edad in edades:
    print(edad) #Muestra Hector y Juan.
for clave in edades:
    print(edades[clave]) #Muestra 28 y 45
for clave,valor in edades.items():
    print(clave,valor) #es lo mismo que el anterior.

personajes = []
p = {'Nombre':'Gandalf','Clase':'Mago','Raza':'Humano'}
personajes.append(p)

for p in personajes:
    print(p['Nombre'],p['Clase'])

CONJUNTOS

Son colecciones desordenadas, se suele utilizar para hacer pruebas de pertenencia a grupos y eliminacion de elementos duplicados. Al agregar elementos, no siguen un orden como en las listas. Se agregan desordenadamente. En un conjunto no puede haber elementos duplicados.

conjunto = set() #Crea un conjunto vacio
conjunto = {1,2,3}
conjunto.add(4) # Muestra 1,2,3,4
conjuntos.discard(1) #Quita el 1 del conjunto.
conjunto.add('H') # Muestra 1,2,3,4,H
conjunto.add(0) # Muestra 0,1,2,4,H
grupo = {'hector','juan','lucas'}
'Hector' in grupo #Devuelve true.
milista = [1,2,2,2,1,1]
miconjunto = set(milista)
miconjunto #Elimina los repetidos
lista = list(miconjunto) #Volvemos a pasarlo a lista sin los elementos repetidos.
c = {1,2,3}
c2 = c
c2.discard(3)#Elimina 3 de c2 y c ya que los conjuntos son referenciados...
c2 = c.copy() #Si modificamos c2 no modificamos c.

Las listas pueden ser anidadas, es decir, listas que contienen otras listas.

a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
r = [a,b,c]
r[0][1] #Seria igual a 2

Las listas no son inmutables. pares = [0,2,4,5,8,10] pares[3] = 6 pares.append(12) #Agrega 12 al final de la lista. pares.insert(0,10) #Pondria un 10 al principio de la lista. pares.remove(2) #Elimina el primer 2 que encuentre en la lista. pares.reverse() #Hace reverse a la lista pares.pop() #Muestra el ultimo elemento de la lista y lo elimina.

numeros = [1,2,3,4] datos = [4,"Una",-1,3.14,"Otra"]

datos[0] #Muestra4 datos[-1] #Muestra Otra datos[-2:] #Muestra 3.14, Otra

datos[:3] = [] #Borraria los 3 primeros datos.

numeros + [5,6,7] #Se aƱade

lista = [1,2,3,4,5] lista.append(6) #Agrega 6 al final de la lista. lista.clear() #Vacia la lista lista.count('1') #Cuenta cuantas veces aparece 1. lista.index('3') #Nos dice en que indice aparece lo que buscamos

l1 = [1,2,3]
l2 = [4,5,6]
l1.extend(l2) # Extende la lista
lista = []
for letra in 'casa':
    lista.append(letra)
print(lista)

es equivalente a:

lista = [letra for letra in 'casa']
lista = []
for numero in range(0,11):
    lista.append(numero**2)
#Lista contiene la potencia de 2 de los primeros 10 numeros

es equivalente a:

lista= [numero**2 for numero in range(0,11)]

Textos

El texto se puede escribir entre " " o ' ' Se puede escoger para usar la contraria en el interior, por ejemplo: 'Este texto incluye "comillas"' "Este texto incluye 'comillas simpes'"

Si se quiere utilizar dentro las mismas que fuera se debe usar \ como caracter de escape. "Esta \"palabra\" entre comillas" print("palabra\tcontabulador") print("Un text\nuna nueva linea") Si queremos que no procese el tema de tabular, nuevo salto etc... se usa el type r de "raw" print(r"C:\nombre\directorio") #Mostraria c:\nombre\directorio

print("""Una linea otra linea otra linea""")

Para concatenar cadenas: c = "cadena" print (c+c) o s = c + c

Multiplicar textos.

cadena = "A" * 10 # Mostraria 10 Aes.

Una cadena es inmutable, no se pueden modificar sus caracteres individualmente. palabra = "Python" len(palabra) nos devuelve 6 porque tiene 6 letras. palabra[0] #Es igual a P pero no se puede modificar.

"Hola Mundo".upper() #Devuelve todo en mayuscula "Hola Mundo".lower() #Devuelve todo en minuscula "hola mundo".capitalize() #Devuelve Hola mundo "hola mundo".title() #Devuelve Hola Mundo "Hola mundo".count('o') #Devuelve 2 ya que hay 2 oes. "Hola mundo".find('mundo') #Devuelve 5 que es donde empieza la palabra. "Hola mundo".startswith("Hola") #Devuelve true "Hola mundo".endswith("mundo") #Devuelve true "Hola mundo mundo".split() #Devuelve una lista con las 3 palabras. " HOLA MUNDO ".strip() #Borra los espacios "-----Hola Mundo----".strip('-') #Borra los - "Hola mundo".replace('o','0') #Cambia oes por 0

c="100" c.isdigit() #Devuelve true si todos los caracteres son digitos.

Para buscar palabras por patron:

import re

parole = "palabra magica"
encontrado = re.search("magica",parole)
if encontrado is not parole:
    print ("se ha encontrado")
else:
    print("NOP")

encontrado.start() # Indica el inicio de donse se ha encontrado
text = "Vamos a dividir esta cadena"
re.split(' ',text) # Devuelve una lista con ['vamos','a','dividir....']

Indices/Slicing

palabra = "Python"
palabra[0] #es la P
palabra[-1] # es la n 
palabra[-2] # es la o
palabra[0:2] #Muestra Py (el ultimo no cuenta, se excluye el ultimo)
palabra[2:] # Muestra thon.
palabra[:] # Muestra la palabra completa
palabra[-2:] # Muestra 2 ultimas letras.

Operadores logicos

3 == 2 # Igual que 3 != 2 # Diferente de 3 > 2 # Mayor que 3 < 2 # Menor que 3 >= 4 # Mayor o igual que 3 <= 2 # Menor o igual que

c = "Hola" c[0] == "H" #True c[-1] == "a" #True

a += 5 # Se va sumando 5 cada vez.

IF

a = 5
if a == 2:
    print("a vale 2")
if a == 5:
    print("a vale 5")
a = 5
b = 10
if a == 5:
    print("a vale",a)
    if b == 10:
        print("y b vale",b)
n = 10
if n % 2 == 0:
    print(n,"Es un numero par")
else:
    print(n,"Es un numero impar")


comando = "SALIR"
if comando == "ENTRAR":
    print("Bienvenido")
elif comando == "SALUDAR"
    print("Hola")
elif comando == "SALIR"
    print("Saliendo")
else:
    print("Orden incorrecta")
If true:
    pass #Pass se utiliza para dejar como un bloque vacio.

WHILE Repite un bucle siempre que este en TRUE.

c = 0
while c <= 5:
    c+=1
    print("c vale",c)
c = 0
while c <= 5:
    c+=1
    print("c vale",c)
else:
    print("Se ha completado todo la iteracion")

# El else solo se ejecuta si termina bien el while.
c = 0
while c <= 5:
    c+=1
    if (c==2):
        print("Rompemos el bucle")
        break
    print("c vale",c)

else:
    print("Se ha completado todo la iteracion")
# No se ejecuta el else, el else solo se ejecuta si termina el while, a la que c sea igual a 2 sale del bucle.
c = 0
while c <= 5:
    c+=1
    if (c==2):
        print("Rompemos el bucle")
        continue
    print("c vale",c)

else:
    print("Se ha completado todo la iteracion")

# El while se ejecuta entero y el else tambien. Se ejecuta el if cuando c es igual a 2 y todo continua con normalidad sin salir del bucle. (Solo se salta esa iteracion)
print("Bienvenido al menu")
while(True): #Bucle infinito
    print("""Elige opcion 
    1)Saludar
    2) Sumar
    3) Salir""")
    opcion = input()
    if opcion == '1':
        print ("Hola")
    elif opcion == '2':
    elif opcion == '3':
        break
    else:
        print ("Opcion incorrecta")

FOR

numeros = [1,2,3,4,5]
for numero in numeros:
    print(numero)
numeros = [1,2,3,4,5]
for indice,numero in enumerate(numeros):
    numeros[indice] += 10 #Indice se autoincrementa automaticamente en cada iteracion.
numeros
cadena = "Hola"
for caracter in cadena:
    print(caracter)
#Recordamos que las cadenas no se pueden modificar cadena[1] = a no se puede.
for i in range(10):
    print(i) #La printa 10 veces.

MANEJO DE EXCEPCIONES

Una excepcion hace que el programa continue aunque haya errores. Todo el codigo propenso a errores se mete en try.

try:
#Lineas propensa a error.
except:
#Hace algo en caso de error.

Se ejecuta hasta que todo funcione correctamente.

while(True):
    try:
        Codigo propenso a error
        break
    except:
        Codigo en caso de error.

La mejor forma es la siguiente para que quede bien:

while(True):
    try:
        Codigo propenso a error
    except:
        Codigo en caso de error.
    else:
        break #Si todo va bien se ejecuta el else.
try:
    n = input("Introduce un numero")
    5/n
except Exception as e: 
    print(type(e).__name__) #Muestra el tipo de error. 
try:
    CODIGO
except TypeError:
    CODIGO CUANDO LA EXCEPTION ES TYPERROR.
except:
    CODIGO CUANDO LA EXEPCION NO ES TYPERROR.

SALIDAS

v = "otro texto"
n = 10
print("Un texto",v,"y un numero",n)
Otra forma de mostrar el ejemplo anterior:
c = "Un texto {} y un numero {}".format(v,n)
v = "otro texto"
n = 10
print("un texto {texto} y un numero {numero}").format(numero=n,texto=v)

FUNCIONES Al utilizar un return, la funcion devuelve el valor y finaliza la funcion. Cuando enviamos un dato por valor, se crea una copia local en la funcion. Las colecciones, listas, conjuntos se envian por referencia, en lugar de una copia se maneja el original y si se modifica, se modifica en la variable global.

def test():
    return "HOLA"
    print "ADIOS" #No se printara nunca.
def saludar():
    print("HOLA")
def dibujar_tabla_del_5():
    for r in range(10)
        print(i+5)
m = 10
def test():
    print(m) # Muestra 10
test()
#Para que esto pase, la variable debe definirse antes de la funcion.
def test():
    return[1,2,3,4,5]
l = test()
l[-1]
def test():
    return "Una cadena",20,[1,2,3]
test() #Seria una tupla.
c,n,l = test() #c seria una cadena, n seria 20, y l seria la lista.
def suma(a,b):
    return a+b
suma(3,4)
def doblar_valor(numero):
    numero+=2
n = 10
dobla_valor(n)
n #n vale 10 
def indeterminados (*args):
    print(args)
indeterminados(1,2,3,4,5) #Devuelve una tupla.
def indeterminados (*args):
    for arg in args:
        print(arg)
indeterminados(1,"hola",3)
def indeterminados_nombre(**kwargs): #Para devolver diccionario en lugar de tupla.

    for kwarg in kwargs:
        print(kwarg)
indeterminados_nombre(n=5,c="HOLA",l=[1,2,3,4,5])

CLASE

Un metodo es una funcion dentro de una clase. El metodo init se ejecuta al crear un objeto, permite enviar argumentos. La palabra self hace referencia al propio objeto. La clase es como un molde para crear objetos.

class galleta:
    pass
una_galleta = galleta()
otra_galleta = galleta() #type(otra_galleta) da como resultado __main__.Galleta.
una_galleta.sabor = "Salado"
una_galleta.color = "Marron"
class galleta:
    chocolate = False
    g = Galleta()
    g.chocolate # Da false.
    class galleta():
    chocolate = False
    def __init__(self):
        print("Se acaba de crear una galleta.")
g = Galleta() #Printa se acaba de crear una galleta.
class galleta():
    chocolate = False
    def __init__(self):
        print("Se acaba de crear una galleta.")
    def chocolatear(self):
        chocolate = True
g = Galleta() #Printa se acaba de crear una galleta.
g.chocolatear()
g.chocolate # Da false ya que el "chocolate" de la funcion, no es el mismo que chocolate de la clase. Para hacer referencia a la variable de la clase se hace elsiguiente ejemplo:
class galleta():
    chocolate = False
    def __init__(self):
        print("Se acaba de crear una galleta.")
    def chocolatear(self):
        self.chocolate = True

g = Galleta() #Printa se acaba de crear una galleta.
g.chocolatear()
g.chocolate
class galleta():
    chocolate = False
    def __init__(self, sabor, color):
        self.sabor = sabor  #El self.sabor es igual a la variable "sabor" de la clase.
        self.color = color
        print("Se acaba de crear una galleta.")
g = Galleta("salada","marron") #Printa se acaba de crear una galleta.
class pelicula:
    def __init__(self,titulo,duracion,lanzamiento):
        self.titulo = titulo
        self.duracion = duracion
        self.lanzamiento = lanzamiento
        print("Se ha creado la pelicula",self.titulo)

    #Destructor de clase
    def __del__(self):
        print("Se borra la pelicula", self.titulo)
p = pelicula("Padrino",160,1989)
del(p) #Ejecutaria el destructor.

SOCKETS

TCP y UDP se suelen usar para ofrecer servicios. Raw Sockets se suelen usar para sniffing e inyeccion.

SERVER

import socket
tcpsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpSocket.bind(("0.0.0.0",8000))
tcoSocket.listen(2)
print("waiting for a client")
(client, (ip,socket)) = tcpSocket.accept()
print ("Se recibe conexion de ", ip)

CLIENTE

tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpSocket.connect((sys.argv[1], 8000))
while 1:
    userInput = raw_input("Introduce un string:")
    tcpSocket.send(userInput)
    print tcpSocket.recv(2048)
tcpSocket.close()
import SocketServer

class EchoHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        print "Conexion de", self.client_address
        data = "dummy"
        while len(data):
            data= self.request.recv(1024)
            print "Client sent:D" + data
            self.request.send(data)
        print "Client left"

serverAddr = ("0.0.0.0",9000)
server = SocketServer.TCPServer(serverAddr, EchoHandler)
server.serve_forever()

Lectura por teclado

valor = input("Introduce un valor: ") El input lo trata todo como un string, con lo cual si valor es 100, luego no puedes hacer valor + 100 Para convertir el valor a entero: valor = int(valor)

Si sabemos que va a ser un entero de entrada... valor = int(input("Pon un numero: "))

MODULOS

Para crear un modulo se crea el fichero hola.py y se crea la siguiente funcion:

def saludar():
    print("HOLA")

Luego desde cualquier fichero python: from hola import * y ya podriamos usar saludar()

Manejo de ficheros

text = "Una linea con texto"
fichero = open("file.txt","w")
fichero.write(texto)
fichero.close
fichero = open("file.txt","r")
text = fichero.read()
print(texto)
fichero = open("file.txt","r")
text = fichero.readline()
print(text[3]) # Muestra la 3 linea.
with open('fichero.txt', 'r') as fichero:
    for linea in fichero:
        print(linea)

Expect permite interactuar con aplicaciones y automatizar tareas.

import pexect
id = pexpect.spawn('ftp localhost')
id.expect_exact('Name')
id.after #Muestra Name
id.before # Muestra connected to localhost...
id.sendline('demo')
id.expect_exact('Password')
id.sendline('demo123')

lines = id.before.split('\n')
for line in lines:  
    print line

Paramiko sirve para conectarse a servidor ssh o sftp.

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('localhost', username='demo', password='demo123')
stdin, stdout, stderr = ssh.exec_command('cat /etc/passwd')

for line inj stdout.readlines():
    print line.strip()

ssh.close()

URLLIB

import urllib
httpResponse = urllib.urlopen("http://localhost") #
httpResponse.code # Muestra el codigo 
httpResponse.read() # Muestra el resultado.
httpResponse.headers.items() # Muestra los items del header.

Pickle se usa para guarda estrucutras y demas en ficheros binarios.

import pickle
lista = [1,2,3,4,5]
fichero = open('fichero.pckl','wb') #wb es escritura binaria
pickle.dump(lista, fichero) #Guarda el contenido de la lista en el fichero.
fichero.close
fichero = open('fichero.pckl','rb') #Para leer el ejemplo anterior
lista = pickle.load(fichero)

Creacion de procesos (FORK)

Fork es clonar un proceso, el PID es diferente entre el padre y el hijo. Puede haber un hijo dedicado a una tarea pedida por el padre. Se pueden comunicar usando IPC.

import os

def child_process ():
    print "Im the child y mi PID es: %d" %os.getpid()
    print "The child is exiting"

def parent_process():
    print "Im the parent process with PID: %d" %os.getpid()
    childpid = os.fork()
    if childpid == 0:
        child_process()
    else:
        print "We are inside the parent"
    while True:
        pass

parent_process()

THREADS

import thread
import time

def worker_thread(id):
    print "Thread ID %d now alive"%id
    count = 1
    while True:
        print "Thread with ID %d has counter value %d"%(id,count)
        time.sleep(2)
        count +=1

for i in range(5):
    thread.start_new_thread(worker_thread,(i,))

print "Main thread going for a infinite wait loop"

while True:
    pass

THREADS Y QUEUES

Se crea cola de tareas. Los threads reciben una terea Los threads completan una tarea e informan a la cola. Todos los threads acaban cuando la cola esta vacia.

import threading import Queue import time

class WorkerThread(threading.Thread): def init(self, queue): threading.Thread.init(self) self.queue=queue

def run(self):
    print("In WorkerThread")
    while True:
        counter = self.queue.get()
        print "Ordered to sleep for %d seconds!"%counter
        time.sleep(counter)
        print "Finished sleeping for %d seconds"%counter
        self.queue.task_done

queue = Queue.Queue()

for i in range(10): print "Creating WorkerThread:%d"%i worker = worker.Thread(queue) worker.setDaemon(True) worker.start() print "WorkerThread %d Created"%i

for j in range (10): queue.put(j)

queue.join() print "All tasks over"

SUBPROCESOS

import subprocess
subprocess.call(['ps',aux]) #Ejecuta ps aux
subprocess.check_output(['ps','aux']) # Para trabajar sobre el output