<jupyter_start><jupyter_text>Cuaderno para cargar archivos a MinIO En este cuaderno se muestran algunas funciones de ayuda y algunos ejemplos para cargar archivos y directorios completos a MinIO.Este ejemplo asume que ya se ejecutó el cuadreno DescargaDatos.ipynb  Librerias<jupyter_code>from minio import Minio
from minio.error import S3Error
import os
from minio.deleteobjects import DeleteObject<jupyter_output><empty_output><jupyter_text>Configuración de conexión<jupyter_code>client = Minio(
        "minio:9000",
        access_key="minio",
        secret_key="minio123",
        secure=False
    )<jupyter_output><empty_output><jupyter_text>Funciones de ayudaAlgunas funciones que nos ayudan a subir archivos y directorios completos de manera recursiva<jupyter_code># Crear una cubeta para almacenar datos
def create_bucket(client, bucket):
    if client.bucket_exists(bucket):
        print("Bucket {} already exists".format(bucket))
    else:
        client.make_bucket(bucket)
    
# Copia un solo archivo 
def copy_file(client,bucket,file_path,dest_folder=""):
    file_name= os.path.basename(file_path)
    client.fput_object(bucket, os.path.join(dest_folder,file_name), file_path)
    #print("File {} copied to {}".format(file_path,os.path.join(dest_folder,file_name)))
    
# Copia todo el contenido de un directorio de manera recursiva manteniendo el esquema de archivos
def copy_folder(client,bucket,folder_path,dest_folder=""):
    folder_name = os.path.basename(folder_path)
    dest_folder = os.path.join(dest_folder, folder_name)
    for file_name in os.listdir(folder_path):
        file_path = os.path.join(folder_path, file_name)
        if os.path.isdir(file_path): 
            copy_folder(client,bucket,file_path,dest_folder)
        else:
            copy_file(client,bucket,file_path,dest_folder)
            
# Borrra todos los objetos que esten en un directorio de MinIO. USar con mucho cuidado
def delete_objects(client,bucket,prefix=None):
    names = map(
        lambda x: DeleteObject(x.object_name),
        client.list_objects(bucket, prefix, recursive=True)
    )
    for err in client.remove_objects(bucket, names):
        print("Deletion Error: {}".format(err))<jupyter_output><empty_output><jupyter_text>Ejemplo de datosAqui se muestra un ejemplo con datos abiertos de INEGI de la encuesta ENIGH. Para descargar y descomprimir los archivos en sus locaciones adecuadas por favor utilice el cuaderno DescargaDatos.ipynbPara este ejemplo funcional los datos se deben cargar a la capeta warehouse/ de MinIO ya que es la que esta conectada a Hive-Metastore<jupyter_code>copy_folder(client, "hive", "../data/conjunto_de_datos_enigh_2018_ns_csv","warehouse/")
copy_folder(client, "hive", "../data/conjunto_de_datos_enigh2016_nueva_serie_csv","warehouse/")
copy_folder(client, "hive", "../data/enigh_ncv_2014_csv","warehouse/")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08820477343479764, 'fraction_numerical': 0.0069180214458664825, 'mean_word_length': 4.9628865979381445, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '590089', 'license': 'Apache-2.0', 'n_tokens_mistral': 986, 'n_tokens_neox': 967, 'n_words': 232, 'path': 'services/python-jupyter/scripts/CargaObjetos.ipynb', 'repo_name': 'irvcaza/datalake4os', 'size': '2891'}