Programación

Manejo de ficheros en Python

Posted on 3 min read 33 views

Abrir un fichero y leer su contenido es muy sencillo en Python. Veamos un primer ejemplo en que queremos leer un fichero de texto (.txt) localizado en el mismo directorio que el archivo Python (.py) a ejcecutar:

file = open('example.txt')
for line in file:
    print line,

La función open abre el fichero. Posteriormente recorremos las líneas del archivo de texto e imprimimos cada una de ellas, haciéndolas terminar, en este caso, sin ningún carácter.

Debe notarse la coma (,) en la sentencia print. Esto hace que se concluya la línea con un espacio en lugar de con un salto de línea. Es un comando propio de Python 2.x, que se realiza de otro modo en Python 3.x (no abordamos aquí sentencias en Python 3.x).

Podemos especificar que se trata de la lectura de un archivo añadiendo un segundo argumento a la función open:

file = open('example.txt', 'r')

donde r viene de read.  Cuando se trate de abrir un archivo para la escritura, el segundo argumento será w, de write, y cuando se trate de añadir nuevo contenido a un fichero ya existente se utilizará a, de append.

En el siguiente ejemplo vamos a abrir un archivo, leer su contenido y escribir dicho contenido en un nuevo archivo de texto:

input = open('old.txt','r')
output = open('new.txt','w')
for line in input:
    print >> output, line,

donde r viene de read.

Lo anterior es válido para ficheros de texto con un número pequeño de líneas. Para ficheros grandes el procedimiento de leer línea por línea el fichero no es operativo. Para ello debe establecerse el tamaño de un buffer de modo podamos procesar ese tamaño de información cada vez, en lugar de línea por línea. En el siguiente código establecemos el tamaño de la información a procesar (buffersize) y leemos el archivo original en secciones de ese tamaño (input.read(buffersize)). Posteriormente vamos escribiendo dichas secciones una a una en el archivo destino (output.write(buffer)) hasta llegar a un máximo para el tamaño del archivo destino (bufferlimit). En pantalla escribimos un indicador de cada paso del proceso (print”&”,).

buffersize = 100000
input = open('bigfile.txt', 'r')
output = open('newbigfile.txt', 'w')
buffer = input.read(buffersize)
bufferlimit = 1000000

while bufferlimit >0:
    output.write(buffer)
    bufferlimit = bufferlimit - buffersize
    print "&",

El mismo proceso puede realizarse sin límite en el tamaño del archivo final. En este caso la condición del bucle es len(buffer), es decir el tamaño del fichero leído y escrito en bloques de tamaño buffersize).

buffersize = 10000
input = open('bigfile.txt', 'r')
output = open('newbigfile.txt', 'w')
buffer = input.read(buffersize)

while len(buffer):
    output.write(buffer)
    print ".",
    buffer = input.read(buffersize)

Además de contenidos alfanuméricos, es posible tratar archivos con cualquier código binario, ya sean archivos de vídeo, imágenes o cualquier otra información. A continuación presentamos un ejemplo en el que leemos y escribimos una imagen. Establecemos la variable buffersize del tamaño en bits de cada paso del proceso. Al abrir los archivos de entrada y de salida especificamos que son archivos binarios mediante rb (read binary) y wb (write binary). El resto es como cualquier otro archivo.

buffersize = 10000
input = open('image_test.jpg', 'rb')
output = open('new_image_test.jpg', 'wb')
buffer = input.read(buffersize)

while len(buffer):
    output.write(buffer)
    print ".",
    buffer = input.read(buffersize)

Funciones en Python

Posted on 1 min read 16 views

Funciones de usuario

Estas son las funciones creadas por el usuario y que no están predefinidas en Python. La ventaja de las funciones es que las escribimos una vez y podemos usarlas tantas veces como deseemos.

La sintaxis básica de una función es la siguiente:

def function_name():
    string ='Hello'
    return string

print (function_name())

Dentro de la función pueden realizarse las operaciones que se deseen.

A la función se le pueden pasar tantos parámetros, separados por comas, como se deseen:

mylist = [1,2,3,4,5]
def my_function_name(list):
    list.append(6)
    return list

print (my_function_name(mylist))

otherlist = [7,8,9,10]

def other_function_name(list1,list2):
    list1.extend(list2)
    return list1

print(other_function_name(mylist,otherlist))

Funciones con cadenas de caracteres en Python

Posted on 1 min read 18 views

Funciones con cadenas de caracteres

Cuando una variable es una cadena de caracteres es tratada como si dichos caracteres formasen una lista. De este modo, cuando operamos sobre cualquiera de las dos líneas del siguiente ejemplo, string1string2, obtenemos el mismo resultado:

string1 = ['s','t','r','i','n','g']
string2 = 'string'
for letter in string1:
    print(letter)
for letter in string2:
    print(letter)

Otras funciones disponibles son las siguientes:

  • Contar el número de veces que aparece un carácter en una cadena: count.
  • Hacer que todas las iniciales de cada palabra aparezcan en mayúscula: title.
  • Convertir en mayúsculas sólo la primera leta de la cadena: capitalize.
  • Formar una cadena con los caracteres de una lista o una tupla: join.
  • Separar una cadena a partir de un carácter, creando una lista con cada uno de os elementos resultantes: split.
string = 'this is an example of a text string'
print(string.count('s'))
print(string.title())
print(string.capitalize())
string2 ='-'
sequence = ['j','o','s','e']
print(string2.join(sequence))
string3 =''
print(string3.join(sequence))
print(''.join(sequence))
data = string2.join(sequence)
sequence = data.split('-')
print (sequence)

Recepción de datos en Python

Posted on 1 min read 18 views

Recibiendo datos

Existe una diferencia importante en el comando a utilizar para recibir datos ya usemos Python 2.7 o Python 3.0 o superior. Para solicitar una entrada mediante el teclado se emplean dos sentencias diferentes:

  • Python 2.7: raw_imput.
  • Python 3.0: input.

Este es un ejemplo sencillo para Python 2.7:

print ('Hello JM')
raw_input('Press any key to continue')
print('Thanks')

Sin embargo, si podemos usar input en Python 2.7 para asignar el valor de una entrada a una variable:

data = input('What\'s your favorite number?\n')
data = int(data)*20
print('Your favorite number times 20 is {}'.format(data))

Operaciones con listas en Python

Posted on 1 min read 49 views

Operaciones con listas

Vamos a ver diferentes operaciones con listas:

  • Añadir un nuevo elemento: append.
  • Extender una lista o unir dos listas: extend.
  • Añadir un nuevo elemento en un índice determinado de la lista: insert.
  • Editar un elemento en un índice determinado de la lista: =.
  • Borrar elementos de la lista identificados por su índice: del.
  • Borrar elementos de la lista identificados por su valor: remove.
  • Invertir el orden de los índices en la lista: reverse.
  • Ordenar una lista: sort.
  • Crear una nueva lista ordenada a partir de otra lista no ordenada: sorted.

Estos son algunos ejemplos:

list = [0,1,2,3,4,5,6,7,8,9,10,11] # create a list
list2 = [13,14,15,16,17,18,19,20] # create a second list
list.append(12)
print (list)
list.extend(list2)
print (list)
list.insert (6,5.5)
print(list)
list[6] = 33
print (list)
list[6] = 33/3
print(list)
del list[6]
print(list)
list.remove(11)
print (list)
list.reverse()
print(list)
list.sort()
print(list)
list.reverse()
list2 = sorted(list)
print(list2)

Bucles en Python

Posted on 2 min read 17 views

Bucles

Bucle while

La forma de escribir el bucle while es la habitual, utilizando el símbolo dos puntos (:) tras finalizar la condición a cumplir para ejecutar el bucle y antes de indicar la acción a realizar durante el mismo. Dicha condición debe variar para que el bucle pueda cerrarse. Aquí vemos un ejemplo:

a = 0
while a<=20:
    print(a)
    a+=1
print ("Bucle terminado")

Bucle for

La forma de escribir un bucle for es siempre la siguiente:

for (nombre_del_dato) in (cadena, array, etc.) :
acción a ejecutarse

Aquí vemos algunos ejemplos:

a = [0,1,2,3,4,5]
for data in a:
    print(data)
print ("Bucle 1 for terminado")

for data in [0,1,2,3,4,5]:
    print(data)
print ("Bucle 2 for terminado")

for letter in 'string':
    print(letter)
print ("Bucle 3 for terminado")

for key,data in enumerate('cadena'):
    if key % 2 == 0:
        print data
print ("Bucle 4 for terminado")

Excepciones

Python permite el uso de excepciones mediante las sentencias tryexcept. Básicamente, estas sentencias permiten tomar un camino alternativo en caso de que se presente un error, además de permitir visualizar de un modo más amigable el tipo error que aparece en la ejecución. La estructura es la siguiente:

tuple = (0,1,2,3,4,5) # create a tuple
try:
    tuple.append(6) # try to add a new value to a
except: 
    print("Ha ocurrido un error") # exception appear
else:
    for each in tuple:
        print (each)

También puede escribirse como:

tuple = (0,1,2,3,4,5) # create a tuple
try:
    tuple.append(6) # try to add a new value to a
    for each in tuple:
        print (each)
except AttributeError as e: # mark the exception type as e
    print 'Ha ocurrido un error: ',  e # exception appear

Break, continue y else

Break es la sentencia para interrumpir un bucle. Aquí vemos un ejemplo:

list = [0,1,2,3,4,5] # create a list
for int in list:
    if int == 3:
        break
    else:
        print (int)

Del mismo modo, continue se utiliza para continuar el bucle:

list = [0,1,2,3,4,5] # create a list
for int in list:
    if int == 3:
        continue
    else:
        print (int)