Escribir en un fichero en Python

logo python

La tarea de escribir en un fichero en Python es algo común, que forma parte de los primeros pasos, en este lenguaje.

Veamos como hacerlo.

Partamos de considerar que un fichero es un objeto de la clase File, que, sirven para guardar datos en disco que podrán ser leídos posteriormente, ver cómo leer ficheros línea a línea en Python.

Los ficheros con los que trabajaremos en Python regularmente pertenecen o bien al tipo texto o al tipo binario.

Los primeros son aquellos con caracteres legibles para el ser humano, y generalmente codificados para hacer mas fácil su comprensión.

Los segundos, son archivos compuestos por un flujo de bytes  diseñados para ser leídos o utilizados por  programas o aplicaciones especificas.

Para escribir un fichero en Python, debemos abrirlo con open() , al igual que si vamos a leerlo.

Llamar a open automáticamente crea automaticamente un objeto de la clase File.

open(), recibe dos parámetros o argumentos, la ruta donde se encuentra el fichero(path), y el modo en que abrirmos el fichero(lectura,escritura,etc).

Su sintaxis entonces es:

open(path, modo)

Por defecto el modo en que se abre es el modo texto, si necesitamos que Python lo abra en modo binario, deberemos pasarle al modo el argumento b.

Los modos en los que se puede abrir un fichero de tipo texto son:

rSolo lectura y es el modo por defecto si no se indica lo contrario
wSolo escritura, si ya existe el fichero, sobreescribe su contenido.
aAdición. En el fichero solo se puede escribir, por tanto si existe el fichero, aquello que se escriba se añadirá al final del mismo.
xSolo escritura, pero lanzará una excepción si ya  existe el fichero.
r+Lectura y escritura.

Su variante para ficheros del tipo binario es :  rb, wb, ab, xb, rb+.

Entonces para a estructura para abrir un fichero en modo escritura solo necesitamos hacer esto:

Miarchivo = open('miruta/mi_fichero' ,  'w' )
#o esto:
Miarchivo= open('miruta/mi_fichero' ,  'w' )
try:
# acciones para escribir en el fichero
finally:
Miarchivo.close()

O  empleando with, que no brinda lo mismo que el bloque  try – finally, pero en un una sola sentencia with - as.

with open('miruta/mi_fichero' ,  'w' )as f:
# acciones para escribir en el fichero

Una vez abierto el fichero en formato escritura, toca escribirlo, lo cual haremos con write().

Miarchivo = open('miruta/mi_fichero' ,  'w' )
Miarchivo.write('Bienvenidos \n'')
#o esto:
Miarchivo= open('miruta/mi_fichero' ,  'w' )
try:
Miarchivo.write('Bienvenidos \n')
finally:
Miarchivo.close()

#con with
with open('miruta/mi_fichero' ,  'w' )as f:
Miarchivo.write('Bienvenidos \n')

Para escribir un fichero binario añadimos el carácter b:

with open('miruta/mi_fichero' ,  'w' )as f:
Miarchivo.write(b'0x34')

Y esto es todo.

Espero sinceramente poder ayudar a alguien.

El miedo puede hacer que un burro ataque a un león

Obtener la hora y la fecha en Python

logo python

Algo tan sencillo, como obtener la hora y la fecha en Python, es algo que debemos saber, al comenzar con este lenguaje. Aquí muestro como hacerlo.

Para obtener la hora actual en Python tenemos dos módulos incorporados al lenguaje . Estos son time y  datetime.

Time

import time
# time.strftime para obtener la hora actual en Python
a = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
print(a)
b =time.ctime

ctime() es útil para para obtener el día de la semana, el mes, el día, la hora y el año.

time.localtime()  nos devuelve la hora local de la zona horaria en la que estamos, mientras que time.gmtime() nos devuelve la  hora UTC.

 Datetime 

from datetime import datetime
fechaTotal = datetime.now()
print(fechaTotal)
añoYhora = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(añoYhora)
hora = datetime.now().time()
print(hora)

En el código anterior estamos obteniendo un  objeto a de tipo datetime() que incluye toda la información de la fecha, incluyendo el año, el mes, el día y la hora.

Podemos transformarlo a formato string, usando  método strftime().

Para obtener solo la hora podemos emplear datetime.time().

Y hasta aquí.

Espero modestamente, haber ayudado a alguien.

Para ser parte del 1%, hay que hacer lo que el 99%  no hace.

SQLSTATE[HY000]: General error: 1835 Malformed communication packet

laravel error

El error ‘SQLSTATE[HY000]: General error: 1835 Malformed communication packet’, que suele aparecer si nuestra APP en Laravel, trabaja con Maria DB y no soporta la nueva versión del PHP.

Como es un error de configuración, y las nuevas versiones de PHP, son algo mas dúctiles, con la creación de consultas,  debe bastarnos con modificar nuestro archivo database config, añadiendo esta línea de código:

options => [PDO::ATTR_EMULATE_PREPARES => true]

Ojo, esta solución puede tener inconvenientes, pues lo que estamos haciendo es habilitar el uso de declaraciones preparadas en la caché, lo cual puede no ser siempre conveniente.

Lo que hace esta sentencia es hacer el reemplazo de los parámetros  en la librería PDO, en vez de hacerlo en el servidor y así burla la desactualización, por lo que los errores de sintaxis en el tiempo de preparación de la consulta desaparecen, y se traspasan solo al momento de ejecución.

«Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino»

Listar ficheros de un directorio en Python con iterdir()

logo python

En otras ocasiones he hablado sobre otros métodos para listar ficheros, veamos hoy como listar ficheros de un directorio en Python, con iterdir().

Iterdir() es una función iteradora de Python que recorre el contenido de el directorio especificado, en la ruta que le asigne.

Pertenece al módulo pathlib,  a diferencia de scandir cuya función es parecida, pero que es pertenece al modulo os.

Pathlib como os crea objetos diseñador para manejar ficheros y directorios de forma eficiente.

Al listar un directorio, se crea  un objeto Path. Los objetos de clase Path poseen también la propiedad name, y los métodos is_file()  e  is_dir(), que permiten comprobar si una entrada es  un archivo o un directorio.

import pathlib
dir = "/Users/blackmaster/Downloads/"
directorio = pathlib.Path(dir)
for fichero in directorio.iterdir():
    #print(fichero.name)
    if fichero.is_file:
        print('\n archivo:' +fichero.name)
    if fichero.is_dir:
        print('\n Carpeta:' + fichero.name )

Y hasta aquí.

Espero que este articulo sirva de ayuda a alguien.

El que siempre soñó, tiene derecho a ganar

Modelo para guardar un archivo en Django por fecha

logo django

En este articulo intentaré mostrarte como emplear el modelo para guardar un archivo en Django por fecha, lo cual puede ser muy útil al momento de recuperarlo.

Supongamos que tenemos archivos del tipo fotos y notas

Para lograr tenerlos organizarlos por fecha,  la estructura que debe llevar el modelo, puede ser esta en la que los archivos dentro de la carpeta img o la carpeta nota ordenados en el formato año/mes/dia.

foto = models.ImageField(upload_to = 'img/%Y/%m/%d')
nota = models.FileField(upload_to = 'nota/%Y/%m/%d')

Espero sinceramente, haber ayudado a alguien .

Quien siembre 100 boniatos y diga que sembró 200, tendrá que comerse sus mentiras cuando el boniato se le acabe.

D.

Ordenar fechas con sort en Python

logo python

Una forma muy sencilla y útil de organizar cronológicamente elementos, es ordenar las fechas con sort en Python.

Para esto, solo debemos añadir las fechas a una lista, y luego aplicarles el método sort().

En el ejemplo siguiente añadiremos fechas a una lista empleando el método append() y luego aplicaremos sort().

Otros post sobre fechas con Python

import datetime  
# Entramos por teclado las fechas

grupo_fechas=[]

fecha_1 = [input("Introduzca fecha"
        "(DD/MM/YYYY) : ").split('/')]
  
grupo_fechas.append(fecha_1)

fecha_2 = [input("Introduzca fecha"
        "(DD/MM/YYYY) : ").split('/')]
  
grupo_fechas.append(fecha_2)

fecha_3 = [input("Introduzca fecha"
        "(DD/MM/YYYY) : ").split('/')]
  
grupo_fechas.append(fecha_3)
grupo_fechas.sort()
  
for x in grupo_fechas:
    print(x)

El resultado nos devolverá las fechas que introduzcamos organizadas

Y esto es todo, espero sinceramente que este post, sirva a alguien.

No discutas nunca con un imbécil, te llevará a su terreno y allí te ganará por experiencia

D.

UnboundLocalError en Python

python error

Como sugiere el nombre, el error UnboundLocalError solo se genera, cuando se hace referencia de manera incorrecta, a una variable local no asignada.

Todas la excepciones en Python heredan de la clase BaseException, o extienden de una clase derivada de ella.

La jerarquía de la este error es la siguiente:

En la mayoría de los casos, esto ocurrirá al intentar modificar una variable local antes de que sea realmente asignada dentro del ámbito local.

Como puede ver, la función incrementar_valor() hace exactamente lo que el nombre implica: intentar incrementar la variable de conteo en uno y luego generar el resultado.

Sin embargo, existe una clara falta de asignación para la variable de recuento en el alcance local, y al no haber sido definida antes, la ejecución de este código genera un UnboundLocalError:

def incrementar_valor():
        count += 1
        print(count)
incrementar_valor()
UnboundLocalError                         
Traceback (most recent call last)
<ipython-input-50-8c8a38e696a5> in <module>
----> 1 incrementar_valor()
      2 

<ipython-input-49-2b22812a127f> in incrementar_valor()
      1 def incrementar_valor():
      2 
----> 3         count += 1
      4         print(count)
      5 

UnboundLocalError: local variable 'count' referenced before assignment

Dicho de otro modo, lo qué ha sucedido aquí es  que, dado que el analizador no puede localizar la variable count(),  no se puede generar una solución para  ejecutar la instrucción de incremento.

O sea estamos indicando un incremento, en una variable desconocida.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias

…. hay que levantarse cada mañana con una meta y dormirse cada noche con una esperanza….

Y.

Convertir una fecha a fecha y hora en Python

logo python

En este post, muestro otra forma de trabajar con el modulo datetime , empleándolo cuando necesitamos convertir una fecha a fecha y hora en Python

Desde mi conocimiento existen dos modos de hacerlo, una es mediante el uso directo de datetime y el otro utilizando combine datetime().

Aquí puedes ver como sumar y restar fechas con datetime en Python.

Partamos del supuesto que necesitas combinar la fecha y la hora en un solo objeto

Si solo tiene una fecha específica o la fecha actual y no tiene una hora específica, puede inicializarla con el tiempo mínimo usando el objeto datetime

En el ejemplo siguiente importamos la librería datetime, creamos una variable para la fecha, otra para la hora y las combinamos ambas, con combine().

Ejemplo 1

from datetime import date as Hoy
from datetime import datetime as HoyHora
fechaHoy =  Hoy.today()
print(fechaHoy)
horaHoy  =  HoyHora.now().time()
print(horaHoy)
FechaHoraHoy = FechaHoraHoy.combine(fechaHoy, horaHoy )
print(FechaHoraHoy)

Otra  cosa que podemos hacer es extraer  la fecha desde un objeto dado.

from datetime import date as fecha
from datetime import datetime as tiempo
fecha = fecha.today()
print(fecha)
tiempo = tiempo(fecha.year, fecha.month, fecha.day)
print(tiempo)

Y hasta aquí.

Espero que este post, sirva de ayuda a alguien.

Tres cosas necesitan las ovejas para andar en manadas, el miedo al perro, la voz de amo y que la viene detrás empuje por miedo a quedarse sola.

Y.

Leer un fichero línea a línea en Python

logo python

Una tarea común y cotidiana es  leer un fichero línea a línea en Python, lo cual el lenguaje facilita mucho, pero no deja de ser algo que vale la pena explicar.

Para leer un fichero debemos abrirlo con la función open() y luego emplearemos un for para recorrerlo y leerlo.

Es algo así:

with open('ruta_del_fichero') as f:
for linea in f:
 	#codigo….

o así:

#guardamos el contenido del fichero en una variable y lo leemos
fichero = open('ruta_del_fichero', ‘r’)
leído=fichero.read()
print(leido)

 Y esto es todo.

Espero sinceramente, que este post ayude a alguien.

Mejorar continuamente es mejor que ser bueno

ValueError en Python

python error

El ValueError en Python es una muestra de su flexibilidad.  

Python es lo suficientemente inteligente como para saber cuándo el código intenta asignar un valor incorrecto a un objeto.

Y es ahí es cuando lanzará su error ValueError que deberemos manejar.

En este post intentare explicar cual es su causa y su razón de ser.

Todas las excepciones de Python heredan de la clase BaseExceptions.

Dentro de la clase ValueError, también notará algunas otras excepciones.

La estructura jerárquica es esta.

BaseExceptions -> Exception -> ValueError -> UnicodeError -> UnicodeDecodeError -> UnicodeEncodeError -> UnicodeTranslateError

¿Qué es  el ValueError en Python Python?

Un ValueError en Python es aquel que se lanza cuando se asigna un valor incorrecto a un objeto.

numero = 7
lista = []
list.remove(numero)

Causas del ValueError en Python en Python.

Cuando tienes el mismo tipo de objeto, pero el valor incorrecto, Python rechaza el código.

Una equivocación común es confundir un ValueError con un TypeError.

A diferencia de ValueError, se lanzará un TypeError cuando se realiza una operación que utiliza un tipo de objeto incorrecto o no admitido.

O sea es una diferencia de tipo de objeto, no de su valor.

Aplicandolo a la vida real, si tienes un auto e intentas ponerle 5 neumaticos este es un error de valor, o sea un ValueError, por el valor de los neumáticos será como máximo 5.

Si por el contrario tuvieras un auto e intentaras meterlo en una bolsa de viaje, es una ejemplo de TypeError, porque además de que no cabe, el tipo de objeto que corresponde no es  ese.

Si ves una ventana que indica un ValueError en Python analiza tu código, buscando una de esas causas.

  • Intentas realizar una operación cuando no existe un valor
  • Tratas de extraer más valores de los que tiene un objeto
  • El valor  que esperas obtener es imposible (por ejemplo, si intentas obtener  la raíz de un número negativo).

Espero haber ayudado.

El amor tiene firma de autor, en las causas perdidas

R. Arjona
Translate »