+++ title = "Rutas y archivos" weight = 2 +++ #### Trabajar con rutas y archivos. ### path Obtener información de una ruta. ```python ruta_archivo = '/home/mau/mi_archivo.ods' p = app.paths(ruta_archivo) app.debug(p.path) app.debug(p.file_name) app.debug(p.name) app.debug(p.ext) app.debug(p.size) app.debug(p.url) ``` ``` 15/08/2022 14:40:08 - DEBUG - /home/mau 15/08/2022 14:40:08 - DEBUG - mi_archivo.ods 15/08/2022 14:40:08 - DEBUG - mi_archivo 15/08/2022 14:40:08 - DEBUG - ods 15/08/2022 14:40:08 - DEBUG - 7011 15/08/2022 14:40:08 - DEBUG - file:///home/mau/mi_archivo.ods ``` Obtener la misma información como un tupla. ```python ruta_archivo = '/home/mau/mi_archivo.ods' p = app.paths(ruta_archivo) app.debug(p.info) ``` ``` 15/08/2022 14:43:01 - DEBUG - ('/home/mau', 'mi_archivo.ods', 'mi_archivo', 'ods', 7011, 'file:///home/mau/mi_archivo.ods') ``` O como diccionario. ```python ruta_archivo = '/home/mau/mi_archivo.ods' p = app.paths(ruta_archivo) app.debug(p.dict) ``` ``` 15/08/2022 14:43:01 - DEBUG - {'path': '/home/mau', 'file_name': 'mi_archivo.ods', 'name': 'mi_archivo', 'ext': 'ods', 'size': 7011, 'url': 'file:///home/mau/mi_archivo.ods'} ``` ### home Obtener la carpeta de inicio del usuario. ```python p = app.paths app.debug(p.home) ``` ### documents Obtener la carpeta Documentos del usuario. ```python p = app.paths app.debug(p.documents) ``` ### user_profile Obtener la ruta del perfil de usuario. ```python p = app.paths app.debug(p.user_profile) ``` ### user_config Obtener la ruta de la carpeta `config` en el perfil de usuario. ```python p = app.paths app.debug(p.user_config) ``` ### python Obtener la ruta del ejecutable `python` ```python p = app.paths app.debug(p.python) ``` ### to_system Pasar una ruta en formato URL al formato del sistema de archivos del SO. ```python p = app.paths ruta_url = 'file:///home/mau/mi_archivo.ods' ruta = p.to_system(ruta_url) app.debug(ruta) ``` ### to_url Pasar una ruta del sistema de archivos del SO al formato URL. ```python p = app.paths ruta = '/home/mau/mi_archivo.ods' ruta_url = p.to_url(ruta) app.debug(ruta_url) ``` ### config Obtener rutas de la configuración de LibreOffice. Por default obtiene la ruta de `Documentos`, para otras ruta mire [Api XPathSettings][1] ```python p = app.paths ruta = p.config() app.debug(ruta) ruta = p.config('UserConfig') app.debug(ruta) ``` {{% notice tip %}} Algunas rutas pueden ser más de una, separados por `;`, en este caso, el resultado es una lista con las rutas. {{% /notice %}} ### join Concatenar rutas. ```python p = app.paths ruta = p.join('/home/mau', 'pruebas', 'archivo.ods') app.debug(ruta) ``` ### exists Verificar si una ruta existe. ```python p = app.paths resultado = p.exists('/home/mau/test/archivo.ods') app.debug(resultado) ``` ### exists_app Verificar si una aplicación existe. ```python p = app.paths resultado = p.exists_app('noexiste') app.debug(resultado) resultado = p.exists_app('soffice') app.debug(resultado) ``` ### is_dir Verificar si la ruta es un directorio. ```python p = app.paths resultado = p.is_dir('/home/mau') app.debug(resultado) ``` ### is_file Verificar si la ruta es un archivo. ```python p = app.paths resultado = p.is_file('/home/mau/mi_archivo.ods') app.debug(resultado) ``` ### temp_file Crear un archivo temporal, es borrado automáticamente al cerrarse. ```python p = app.paths f = p.temp_file() f.write(app.INFO_DEBUG) f.close() ``` Usado en `contexto`, se cierra automáticamente. ```python with p.temp_file() as f: app.debug(f.name) f.write('test') ``` ### temp_dir Crear un directorio temporal, al salir del contexto, es eliminado junto con todo su contenido del sistema de archivos. ```python p = app.paths with p.temp_dir() as d: app.debug(p.exists(d)) app.debug(d) app.debug(p.exists(d)) ``` ### get Permitir al usuario seleccionar archivos, devuelve solo la ruta. De forma predeterminada abre en la carpeta `Documentos`. ```python p = app.paths ruta = p.get() app.debug(ruta) ``` Establecer que abra en otro directorio. ```python ruta = p.get('/tmp') app.debug(ruta) ``` Agregar un filtro. ```python ruta = p.get(filters='ods') app.debug(ruta) ``` Agregar multiples filtros. ```python ruta = p.get(filters='xml,txt') app.debug(ruta) ``` Permitir selecciones multiples. ```python ruta = p.get(filters='xml,txt', multiple=True) app.debug(ruta) ``` ### get_dir Permitir al usuario seleccionar un directorio, devuelve solo la ruta. De forma predeterminada abre en la carpeta `Documentos`. ```python p = app.paths ruta = p.get_dir() app.debug(ruta) ``` Establecer que abra en otro directorio. ```python ruta = p.get_dir('/tmp') app.debug(ruta) ``` ### get_for_save Permitir seleccionar un directorio y capturar el nombre del archivo, devuelve la ruta completa. ```python p = app.paths ruta = p.get_for_save() app.debug(ruta) ``` Establecer que inicie en otro directorio. ```python ruta = p.get_for_save('/tmp') app.debug(ruta) ``` Si se establece un filtro, automáticamente se agrega la extensión. ```python ruta = p.get_for_save(filters='txt') app.debug(ruta) ``` ### files Obtener archivos de una ruta, no recursivamente. De forma predeterminada regresa todos, incluyendo archivos ocultos. ```python ruta = '/home/mau' p = app.paths archivos = p.files(ruta) for a in archivos: app.debug(a) ``` Filtrar por tipo de archivo. ```python p = app.paths archivos = p.files(ruta, '*.pdf') ``` Obtener archivos de forma recursiva. ```python p = app.paths archivos = p.files(ruta, '**/*.xml') ``` ### walk Obtener archivos de forma recursiva. ```python p = app.paths ruta = '/home/mau/Documents' archivos = p.walk(ruta) for a in archivos: app.debug(a) ``` Con filtro. ```python archivos = p.walk(ruta, 'ods') ``` Con filtros. ```python archivos = p.walk(ruta, 'ods|odt') ``` ### dirs Obtener los directorios de una ruta, no recursivamente. ```python p = app.paths ruta = '/home/mau/Documents' folders = p.dirs(ruta) for f in folders: app.debug(f) ``` ### walk_dirs Obtener los directorios de una ruta, no recursivamente. ```python p = app.paths ruta = '/home/mau/Documents' folders = p.walk_dirs(ruta) for f in folders: app.debug(f) ``` Obtener información en una lista de tuplas: (ID_FOLDER, ID_PADRE, NOMBRE) ```python folders = p.walk_dirs(ruta, True) ``` ### extension Obtener la ruta de instalación de una extensión a partir de su ID. ```python p = app.paths id_ext = 'net.elmau.zaz.talk' ruta = p.extension(id_ext) app.debug(ruta) ``` ### replace_ext Reemplazar extensión de un archivo. ```python p = app.paths ruta = '/home/mau/mi_archivo.ods' ruta_nueva = p.replace_ext(ruta, 'pdf') app.debug(ruta_nueva) ``` ### open Abrir cualquier archivo con el programas predeterminado del SO. ```python p = app.paths ruta = '/home/mau/archivo.pdf' p.open(ruta) ruta = '/home/mau/index.html' p.open(ruta) ``` ### save y read Guardar y leer datos, el encoding predeterminado es UTF8. ```python p = app.paths datos = """¿Quieres saber quién eres? No preguntes. Actúa. La acción te delineará y definirá. Thomas Jefferson """ ruta = '/home/mau/temp.txt' p.save(ruta, datos) datos = p.read(ruta) app.msgbox(datos) ``` Cambiar el encoding. ```python app.paths.save(ruta, datos, 'iso-8859-1') ``` ### save_bin y read_bin Guardar y leer datos binarios. ```python p = app.paths datos = b'Datos binarios' ruta = '/home/mau/temp.bin' p.save_bin(ruta, datos) datos = p.read_bin(ruta) app.msgbox(datos) ``` ### save_json y read_json Guardar y leer en formato json. ```python p = app.paths ruta = '/home/mau/datos.json' datos = { 'tipo': 'calc', 'nombre': 'miarchivo.ods', } p.save_json(ruta, datos) datos = p.read_json(ruta) app.msgbox(datos) ``` ### save_csv y read_csv Exportar e importar datos en formato CSV. Vea la documentación [CSV][2] para los argumentos que puede usar. ```python p = app.paths ruta = '/home/mau/datos.csv' ahora = app.dates.now datos = ( (1, 'uno', ahora), (2, 'dos', ahora), (3, 'tres', ahora), ) p.save_csv(ruta, datos) datos = p.read_csv(ruta) app.msgbox(datos) ``` ### kill Borra archivos o directorios con todo su contenido. Devuelve verdadero (True) en caso de exito y falso (Falso) en cualquier otro caso. {{% notice warning %}} Este proceso es destructivo, es buena practica siempre solicitar confirmación al usuario. {{% /notice %}} ```python p = app.paths ruta = '/home/mau/temp.bin' resultado = p.kill(ruta) app.msgbox(resultado) ``` ### copy Copiar archivos. Devuelve la ruta completa final destino. De un origen a una carpeta destino ```python p = app.paths ruta_origen = '/home/mau/temp.txt' ruta_destino = '/home/mau/Desktop' ruta = p.copy(ruta_origen, ruta_destino) app.debug(ruta) ``` Cambiar el nombre destino. ```python ruta_origen = '/home/mau/temp.txt' ruta_destino = '/home/mau/Desktop' nuevo_nombre = 'datos.csv' ruta = p.copy(ruta_origen, ruta_destino, nuevo_nombre) app.debug(ruta) ``` [1]: http://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1util_1_1XPathSettings.html [2]: https://docs.python.org/3.7/library/csv.html