¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Scripting Python en Linux
  3. Los formatos de archivo populares
Extrait - Scripting Python en Linux Desarrolle sus herramientas de sistema
Extractos del libro
Scripting Python en Linux Desarrolle sus herramientas de sistema Volver a la página de compra del libro

Los formatos de archivo populares

Introducción

Este capítulo está dedicado a algunos de los múltiples formatos de archivo que se pueden encontrar en el mundo de la informática y que se pueden leer o escribir con Python.

Python se revela como una herramienta valiosa, porque puede leer y escribir muchos de estos formatos, acceder a muchas bases de datos y conectarse directamente a los servicios web.

En resumen, es muy habitual que no se sepa cómo alimentar la base de datos A con datos del servidor B. Y ahí es dónde ofrecemos la solución: Python, y un poco de sentido común.

El formato de archivo "INI"

Honre a los antiguos, incluso si algunos no conocen el formato de los archivos de configuración ".ini", este todavía se puede usar.

Este formato fue introducido por los sistemas Windows a partir de 1985. Muchos archivos de configuración utilizaron este formato y luego, poco a poco, los desarrolladores de Microsoft los sustituyeron por la temible "base de registro". Pero si busca bien, en una máquina con Windows, todavía hay algunos.

Y también está el archivo php.ini del inevitable lenguaje PHP. En resumen, este formato todavía existe. Y es normal, porque es un formato simple, legible por humanos y editable.

Un archivo .ini está estructurado en capítulos, y en un capítulo hay parámetros en forma de "clave = valor".

El ’;’ el punto y coma permite dejar comentarios, y eso es todo.

Aquí hay un archivo de ejemplo:

; ------------------------------  
; Ejemplo de archivo ini  
; ------------------------------  
;  
; Un capítulo  
[usuario]  
default_user = demo  
default_password = demo  
  
; otro capítulo  
[database]  
server = servbase.example.com  
port = 1521  

El módulo capaz de leer y escribir archivos de este formato, se llama configparser.

Para usarlo y leer el archivo de ejemplo, el procedimiento es el siguiente: después de importar el módulo, instanciamos la clase ConfigParser (notación CamelCase) y leemos el archivo....

Comma Separated Values: CSV

Este formato comienza con un acertijo: no existe una especificación funcional, sin embargo, se utiliza a diario en entornos de oficina o en informática de gestión. Sin duda, esto se debe al hecho de que la mayoría de las hojas de cálculo lo ofrecen como formato de intercambio de datos.

Sin embargo, se trata simplemente de un formato de archivo de texto abierto que se utiliza para intercambiar datos tabulares, con un separador de campo y un separador de líneas, y algunas opciones relacionadas con los delimitadores de cadenas de caracteres.

Habiéndolo conocido muy a menudo en su actividad profesional, a continuación se muestra cómo el autor aconseja utilizarlo:

Separador de campo: código ascii n ° 9: TAB\t para unixianos.

Separador de línea: código ascii 10: LF Line Feed\n.

Delimitador de cadenas de caracteres: la comilla doble ".

Pero eso no es todo. Generalmente, es necesario acordar el formato de los números, las fechas, el uso de un conjunto de caracteres, la presencia o no de comentarios multilínea, la posible notación de medidas anglosajonas, etc.

A pesar de todo, una vez que las cosas están bien establecidas, este formato tiene el mérito de ser sencillo, con preponderancia del contenido.

El módulo Python csv obviamente permite leer y escribir archivos en este formato.

La generación del archivo CSV es facilitada...

MS Office

Python tiene módulos muy potentes para generar documentos en los formatos de ofimática más famosos.

En este caso, se trata sobre todo de generar documentos y pocas veces de leer documentos para extraer información de ellos.

El módulo docx

Este módulo permite generar documentos en este formato, de una forma bastante práctica y elegante.

Aparte de que, por defecto, todo se ajusta al estándar anglosajón, su uso es bastante agradable. Sin embargo, a través de una estación de trabajo Linux, es difícil juzgar su eficiencia, excepto a través de LibreOffice que, como sabemos, lee muy bien el formato docx.

¿Cómo funciona?

Debemos importar la clase Document del módulo docx y, por nuestra particularidad europea, también debemos importar los centímetros de docx.shared. Seguidamente, creamos un objeto de la clase Document.

En MS-Word, los documentos se estructuran en secciones, lo que se corresponde con páginas, pero no solamente. Para acceder a la sección actual, es suficiente con solicitar la última usando el índice -1. Acceder a esta sección permite modificar los márgenes de la página/sección y europeizar un poco el documento.

Luego, use los métodos disponibles para agregar párrafos, tablas, encabezados, etc.

Incluso hay algunas funciones muy útiles, como add_run(), que agrega...

El módulo odfpy

Este módulo es quizás menos fácil de acceder que el anterior, pero parece casi ilimitado, porque gracias a este módulo, todo el formato OpenDocument parece estar al alcance del teclado.

Fan de LibreOffice desde sus inicios (este libro está escrito con la versión 6.4), el autor no ha encontrado un módulo de Python para domar este formato.

Entonces apareció el módulo odfpy como solución. Sin embargo, tal como están las cosas, la documentación es bastante limitada y carece de ejemplos convincentes.

Lo primero que debería poder controlar en un documento de texto, es el formato de las páginas, la orientación vertical u horizontal. No fue fácil, quizás deberíamos haber investigado el formato OpenDocument antes de comenzar a estudiar este módulo. Pero después de investigar un poco, finalmente encontramos algo y he aportado el resultado a este libro.

Sin embargo, este módulo va más allá porque permite generar, pero también modificar y manipular documentos. Y no solo documentos de texto, sino todos los demás: Dibujo, Hoja de Cálculo, Gráfico, Presentación, etc.

1. Documento de texto

Generar un documento de texto con este módulo da un resultado detallado. Sin duda, tendrá que factorizar el código para obtener algo más elegante.

Por otro lado, mirando la documentación y los ejemplos, será posible hacer lo que ofrece el formato OpenDocumenText y esto puede ser de gran ayuda.

Primer punto: obtener una página A4 con márgenes controlados.

Para hacer esto, debe crear un estilo de página e incluir este estilo en la "MasterPage" llamada "Standard".

Posteriormente, tiene que incluirlo en los MasterStyles; este es el precio a pagar para gestionar los argumentos de su página.

En este estilo de página, puede determinar muchos argumentos. Sin embargo, tenga cuidado porque muchos no están configurados de forma predeterminada y aún es necesario especificar muchas cosas.

Luego, debe crear uno o más estilos de texto. En algunos casos, es necesario añadirlos en los estilos automáticos y en otros en el estilo del documento.

La inserción de tablas en el texto se hace de una manera simple y eficiente: creamos una tabla con Table(), agregamos...

El módulo multiformato pyexcel

Este módulo es muy interesante porque permite generar y leer varios formatos.

Para ver en el sitio web del módulo: http://docs.pyexcel.org/

pyexcel: Let you focus on data, instead of file formats

El objetivo de este módulo es leer, manipular y escribir en varios formatos, incluidos: csv, ods, xls, xlsx y xlsm.

Con este módulo, los datos almacenados en "DataSheets" de Excel o LibreOffice, se transforman en objetos de Python como diccionarios o tablas (Arrays).

Solo tiene que invocar el método correcto, ¡es casi mágico!

Ejemplo

# archivo: fic_fmt/pyex1.py  
  
from  pyexcel import get_records  
  
records = get_records(file_name="contactos.ods")  
  
  
fmt = "|{NOMBRE:30s} | {FECHA_NAC:10s} | {TEL:20s} |"  
  
for record in records:  
    print( fmt.format( **record )) 

La hoja de datos es la generada por el primer ejemplo de la sección anterior, excepto que para obtener los nombres de las columnas como claves del diccionario, hemos añadido una línea con los nombres, como sigue:

images/imagen_7.png

contactos.ods

Durante la ejecución, esto da:

 $ python pyex1.py  
|Ángel Sánchez           | 1973-07-29 | +34 91 758 87 95 |  
|Giorgio Salcido  ...

El formato de archivo JSON

El formato de archivo JSON (JavaScript Object Notation) es un formato de archivo de texto, cada vez más utilizado para comunicar entornos heterogéneos, en particular para intercambios basados ​​en el protocolo AJAX y los servicios web.

A pesar del acrónimo de su nombre, de alguna manera escapó del lenguaje JavaScript para vivir por sí solo. Ahora se ha independizado de este lenguaje. Casi todos los lenguajes pueden leer y escribir en este formato.

Aunque tiene un tipo de datos bastante restringido, sin embargo permite hacer muchas cosas de manera sencilla.

Con Python, una vez que se importa el módulo, hay 2*2 métodos para recordar:

dumps()

genera texto en formato JSON a partir de una cadena de caracteres.

loads()

devuelve un objeto Python de una cadena en formato JSON.

load() y dump()

hacen lo mismo, pero desde un descriptor de archivo.

A continuación se muestra un pequeño ejemplo:

#archivo: fic_fmt/json1.py  
  
import json  
  
data = {  
    'quiz': {  
    'Capítulo 1: primer paso': {  
    'Pregunta 1': {  
      'Pregunta': 'De qué se compone un bloque de código python', 
      'opciones': [  
       ...

El formato de archivo XML

XML es más que un formato de archivo. Nunca debemos olvidar que XML significa eXtensible Markup Language, o en español "lenguaje de marcado extensible", y que fue diseñado originalmente para facilitar el intercambio de datos entre sistemas heterogéneos.

De hecho, XML se puede utilizar en muchas otras áreas, hasta tal punto que hubo un momento en el que, por moda, todo tenía que terminar en XML. Es un poco el problema de la informática moderna: tan pronto como aparece una "innovación", se convierte en la solución a todos los problemas.

XML es exigente; es sobre todo una estructura de árbol con una raíz, elementos y una sintaxis rigurosa. Es restrictivo, pero es más una fortaleza que una debilidad. Un documento que tiene un formato incorrecto o que no respeta las restricciones, ya no es XML.

Sabiendo esto, el propósito de esta sección es mostrar cómo generar XML simple o cómo transformar un documento XML en un diccionario.

Es bastante posible ir más allá con Python para validar un documento en función de un esquema por ejemplo, pero luego nos adentramos en problemas de programación más complejos y vamos más allá del objetivo de este libro.

Es decir, si desea verificar la validez de un documento XML, el comando xmllint que se encuentra en todas las buenas distribuciones será un gran aliado.

El lenguaje Python proporciona un módulo muy práctico para ambos casos: leer XML y transformarlo en un diccionario Python, pero también al revés.

Este módulo, como siempre, es fácil de usar. Es suficiente con proporcionarle una cadena o un descriptor de archivo y pedirle que "analice" el contenido. Después es cuando se complica, especialmente cuando no se comprende la estructura de un documento XML.

Tomemos un ejemplo sencillo: el archivo FOLDERS.xml utilizado por el Programa de Gestión Integrada SAGE X3.

Este archivo permite conocer las carpetas de la aplicación de una solución, es decir, un entorno del ERP Sage X3 (recientemente Sage Enterprise Management).

Un ERP (en inglés Enterprise Resource Planning) o PGI (Programa de gestión integrada), es un paquete de software que permite gestionar todos los procesos de una empresa.

Un entorno Sage X3 es un conjunto de componentes...

El módulo tarfile para archivos tar

El formato de archivo tar es bien conocido por los ingenieros de sistemas. Literalmente, su nombre significa "Tape Archive", para archivar en cinta magnética.

En el siglo pasado, durante la prehistoria, por lo tanto ANTES de Internet y Linux, tar no tuvo el éxito que tiene hoy y cpio se usaba mucho más para las copias de seguridad (en disquetes y casetes), en particular debido a un problema con los enlaces.

Además, el formato tar todavía no era compatible entre los diferentes Unix; cpio tenía una opción -c, precisamente para superar los problemas de compatibilidad.

Luego llegó Linux y especialmente GNU Tar, una versión supervitaminada de la utilidad original, compatible, fácil de usar, con muchas opciones y sobre todo en código abierto, gratis e instalable en múltiples Unix. En los tiempos modernos, este formato todavía se usa ampliamente para el intercambio de múltiples archivos.

El módulo tarfile de Python le permite crear y leer archivos en formato tar, pero no solo eso. Este módulo también soporta las diferentes compresiones que se pueden utilizar con esta utilidad.

Combinando tarfile y pathlib, todo orquestado con la instrucción with, la creación de un archivo tgz se realiza en unas pocas líneas.

Todo lo que tiene que hacer es abrir el archivo con el método tarfile.open(), que acepta argumentos para escritura y compresión....

El formato zip

Este formato fue inventado por el Sr. Phil Katz a raíz de un problema de derechos entre PKARC, un software que él mismo había creado y el formato de archivo ARC. El Sr. Katz decidió detener el desarrollo de PKARC para centrarse en otro formato y otro algoritmo de compresión: PKZIP, formato de archivo rápidamente llamado zip debido a la extensión de los archivos: .zip.

Python tiene un módulo para este formato de archivo y como se usa de manera habitual para muchas cosas (.jar, OpenDocument, OOXML, etc.), puede ser interesante saber cómo manejarlo a través del lenguaje Python.

Ejemplo de script para listar un archivo

# archivo: fic_fmt/zip/zipfile2.py  
  
import sys  
import datetime  
import zipfile  
  
def pr_info(archivo):  
  
   SYSTEM = { 0:'Windows', 3:'Unix' }  
  
   zf = zipfile.ZipFile(archivo)  
   fmt = "{f:30s} | {d:10s} | {s:8s} | {v:5d} | \  
             {c_size:10d} | {u_size:10d} |"  
   for info in zf. infolist():  
       if info.filename.endswith('/'):  
           if len(info. filename) <= 29:  
     ...

Resumen

Esta sección describe varios formatos de archivo que se pueden usar con Python.

Pero con estos pocos formatos, le permite cubrir áreas tan amplias como:

Ofimática                                                           odt csv docx xlsx

La gestión de la configuración                           ini xml

El intercambio de datos                                     xml json csv

El archivado, almacenamiento y transferencia de varios archivos.  tar zip

Así que no es necesario reinventar la rueda, especialmente cuando se comienza con un lenguaje. Muchas veces es suficiente con usar lo que existe desde hace mucho tiempo y es reconocido por la mayoría.

Con demasiada frecuencia olvidamos que los ordenadores están hechos, sobre todo, para transmitir información.

En los siguientes capítulos, algunos...