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

lunes, 23 de enero de 2023

Python: leyendo un archivo de texto -

Situación:

  Leyendo un archivo en python3 de texto (csv o txt) hay un carácter que se puede "apreciar" utilizando "more" en terminal pero en python3 es más complicada la situación. 


Ejemplo 1:

 $ more epa.csv 

<U+FEFF>el texto


   En mi caso, el archivo lo generé utilizando Excel y grabando como csv.


Ejemplo 2:

 



Problema:

  Python3 lee el archivo bien, no arroja error pero ese "carácter" invisible queda en las variables, los textos, etc y puede traer algún inconveniente.


Solución:

  La solución es leer el archivo y especificar el encoding, algo tan sencillo como:


FILENAME="epa.csv"

with open(FILENAME, encoding='utf-8-sig') as file:

    for line in file:

        print (line)


Explicación (tomado de: https://stackoverflow.com/questions/17912307/u-ufeff-in-python-string):

The Unicode character U+FEFF is the byte order mark, or BOM, and is used to tell the difference between big- and little-endian UTF-16 encoding.


Espero te haya ayudado





viernes, 2 de diciembre de 2022

4 posibles soluciones en Python3 a: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 503: ordinal not in range(128)

Problema: 
 Al ejecutar un script en python se recibe un mensaje similar a: 

return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 503: ordinal not in range(128) 

Causa:
  Por defecto python intenta utilizar ASCII como encoding, en caso de que el archivo a leer, la variable a declarar tenga otro codec debe ser especificado, sin embargo, en líneas generales UTF-8 es capaz de solucionar la mayoría de las situaciones

Soluciones

1) Especifar el encoding al momento de leer un archivo:
 with open(os.path.expanduser(path), encoding='utf-8') as f:

2) Asignar una variable e indicar la forma de decodificarla:
s = s.decode('utf-8')

3) Declarar variables de entorno (Linux). Por ejemplo

 export LANG=en_US.UTF-8 

export LC_ALL=en_US.UTF-8 export 

export PYTHONIOENCODING=utf8

4) Indicar al comienzo del script el coding. Por ejemplo

#!/usr/bin/python
# coding: utf-8



Suerte, espero haya sido de tu ayuda.





jueves, 1 de julio de 2021

Super sencillo script en python3 para optimizar las tablas de MYSQL

#!/usr/bin/python3.3

#The objetive of this script is to find all tables in a MYSQL DB and opmitize all of them

import dbconnect

import time

from datetime import datetime



## // VARIABLE DECLARATION ##//

startTime = datetime.now()

conn = dbconnect.dbconnect()

conn.autocommit(True)

cur = conn.cursor()


print ("Starting time: ", startTime)


SQLQUERY=("SHOW TABLES") #Find every table in the DB

cur.execute(SQLQUERY)

tables = cur.fetchall()



if len(tables)>0: #Prevent there are not tables in the list

  for table in tables:  #For every table in the DB

    try:

      SQLQUERY="OPTIMIZE TABLE "+ table[0]  #Construct the SQL QUERY

      print ("   Optimizing", table[0])

      cur.execute(SQLQUERY)

    except:

      pass


print ("Script execution time:",datetime.now()-startTime)

print ("Ending time: ", datetime.now())

print ("******** ****** ")

martes, 1 de septiembre de 2020

Pequeño script en Python3 para obtener los registros DNS RRSIG

(seguramente hay más maneras más de hacer esto, incluso más elegantes pero así lo hice yo) 


import dns.resolver
domain='lacnic.net'
domain = dns.name.from_text(domain)
request = dns.message.make_query(domain, dns.rdatatype.ANY)
response = dns.query.tcp(request,'8.8.8.8')
for item in str(response).splitlines( ):
  if 'RRSIG' in item: 
      print (item)

miércoles, 4 de diciembre de 2019

Python3: Una solucion a UnicodeEncodeError: 'ascii' codec can't encode character '\xe1' in position 26: ordinal not in range(128)

Situación:

  Al ejecutar un script en python3 se recibe un error similar a:


UnicodeEncodeError: 'ascii' codec can't encode character '\xe1' in position 26: ordinal not in range(128)


Solución:

  El problema viene dado (tal como lo explica el mensaje) por manejo de strings y unicode, muy seguramente el código contiene algún tipo de carácteres en  
español, portugués, árabe u otro idioma no cubierto por ASCII

  Si lees en Internet hay DECENAS de maneras de solucionar esto, yo solo voy a mencionar una que funciona y es MUY sencilla.

  Si te encuentras en Linux o MAC es tan sencillo como colocar esto antes de ejecutar tu script (dentro de bash):




export PYTHONIOENCODING=utf8


  Lo que se esta haciendo es declarar la variable de entorno PYTHONIOENCODING a utf8, python3 al ser ejecutado utilizará esta variable como encoding y tu problema será resuelto.

  Claro, pudieses colocar dicha variable al entrar a tu sesión, o dentro de un script en bash que posteriormente llame a tu .py, etc, etc.

Suerte, espero haya sido útil.

 

miércoles, 16 de enero de 2019

Como: Utilizar Python3 con Sublime en Macos

Intro:
  Tengo sublime en MAC y deseo programar con Python3

Pasos:
  Voy a asumir que tiene Sublime y python3 en el sistema

  1) Identificar el path a python3 en tu MAC
    a) Puedes hacerlo con el comando which desde tu terminal. Sería:

MacBook-Pro:~$ which python3
/usr/local/bin/python3

  2) En sublime ir a:
  Tools --> Build System ---> New build system
  
  3) Automáticamente se debió un projecto nuevo, aquí debes colocar lo siguiente:

  {
  "cmd": ["/usr/local/bin/python3", "-u", "$file"],
  "file_regex": "^[ ]*File \"(…*?)\", line ([0–9]*)",
  "selector": "source.python"
}

  
(fijate que en /usr/local/bin/python3 debe ir el path de tu python3 que te trajo el comando which)

  4) Grabar con un nombre "lógico" algo como: python3.sublime-build

  5) Luego solo te falta probar.  En una pestaña nueva copia y pega este código:

import sys
print(sys.version)

   6) Graba el mismo con la finalización .py (quizás prueba.py)

  7) Ya casi está listo. Ve a Tools ---> Build System --> Python3 (antes no estaba!)

  8) Ejecuta:  Tools --> Build


Eso es todo, ahora disfruta Sublime en tu MAC y programando en python3.

Suerte.

Referencias:



BGP Stream: un año de análisis sobre incidentes BGP

BGP Stream: un año de análisis sobre incidentes BGP 04/03/2024 Por  Alejandro Acosta , Coordinador de I+D en LACNIC LACNIC presenta  la prim...