python:archivos
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| python:archivos [2022/04/07 12:39] – [Gestión de archivos y directorios] alberto | python:archivos [2023/06/05 16:55] (actual) – [Lectura/escritura con open()] alberto | ||
|---|---|---|---|
| Línea 162: | Línea 162: | ||
| Devuelve el número de caracteres escritos. | Devuelve el número de caracteres escritos. | ||
| + | === Sentencia with === | ||
| + | Con el fin de tener un código más limpio, es común a la hora de trabajar con directorios usar la sentencia **with**, que nos permite evitar tener que estar cerrando el archivo con ' | ||
| + | Un ejemplo: | ||
| + | <code python> | ||
| + | with open(' | ||
| + | file.write(' | ||
| + | </ | ||
| ===== Guardar variables ===== | ===== Guardar variables ===== | ||
| - | ==== Módulo shelve | + | ==== Guardar variables en archivos binarios |
| Con el módulo **shelve** se pueden guardar variables en un archivo binario, para después recuperar sus valores. De ese modo, no se pierde informaión al cerrar el programa (las variables normales son destruidas).\\ | Con el módulo **shelve** se pueden guardar variables en un archivo binario, para después recuperar sus valores. De ese modo, no se pierde informaión al cerrar el programa (las variables normales son destruidas).\\ | ||
| Línea 185: | Línea 192: | ||
| shelfFile.close() | shelfFile.close() | ||
| </ | </ | ||
| - | ==== Función pprint.pformat() | + | ==== Guardar variables en archivos de texto .py ==== |
| En este caso la idea es guardar las variables en un archivo de python (.py), de forma que pueda importarse como una biblioteca, y de ese modo recuperar los dartos.\\ | En este caso la idea es guardar las variables en un archivo de python (.py), de forma que pueda importarse como una biblioteca, y de ese modo recuperar los dartos.\\ | ||
| Para ello se utiliza el método **pformat()** de la biblioteca **pprint** (//Pretty Print//), que devuelve una variable tal y cmo se escribe en código. | Para ello se utiliza el método **pformat()** de la biblioteca **pprint** (//Pretty Print//), que devuelve una variable tal y cmo se escribe en código. | ||
| Línea 210: | Línea 217: | ||
| ====== Trabajar con archivos y directorios ====== | ====== Trabajar con archivos y directorios ====== | ||
| + | ===== Acciones sobre archivos y directorios ===== | ||
| + | Para realizar acciones sobre archivos y directorios, | ||
| + | |||
| + | ==== Copiar ==== | ||
| + | Para copiar un único archivo se utiliza el método **shutil.copy(source, | ||
| + | * **source**: Dirección del archivo, incluído, puede ser de tipo Path o string. | ||
| + | * **destination**: | ||
| + | * retorna un dato Path con el dirección del archivo copiado, incuído éste. | ||
| + | |||
| + | Para copiar un directorio completo, con todos sus subdirectorios y archivos, se utiliza del mismo modo la función **shutil.copytree(source, | ||
| + | |||
| + | ==== Mover y renombrar ==== | ||
| + | Para mover un archivo o un directorio, se utiliza el método **shutil.move(source, | ||
| + | * **source**: Dirección del archivo, incluído, puede ser de tipo Path o string. | ||
| + | * **destination**: | ||
| + | * Si algún valor de los directorios intermedios donde se desea transferir el archivo o directorio no existe, se producirá un error FileNotFound. | ||
| + | * Devuelve la dirección del directorio o archivo movido. | ||
| + | |||
| + | ==== Borrado de directorios y archivos ==== | ||
| + | === Borrado permanente === | ||
| + | * Para borrar permanentemente un único archivo: **os.ulink(// | ||
| + | * Para borrar permanentemente un directorio completamene vacío: **os.rmdir(// | ||
| + | * Para borrar permanentemente un directorio y todo su contenido: **shutil.rmtree(// | ||
| + | |||
| + | <code python> | ||
| + | import os | ||
| + | from pathlib import Path | ||
| + | for filename in Path.home().glob(' | ||
| + | # | ||
| + | print(filename) | ||
| + | </ | ||
| + | |||
| + | === Borrado " | ||
| + | La idea es enviar los archivos a la papelera de reciclaje, en lugar de borrarlos directamente. | ||
| + | Para ellos usamos el método **send2trash()** del módulo **send2trash**.\\ | ||
| + | Es un módulo de terceros que debe instalarse con //pip install --user send2trash// | ||
| + | |||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | 25 | ||
| + | >>> | ||
| + | >>> | ||
| + | </ | ||
| + | |||
| + | ===== Recorrer un árbol de directorios ===== | ||
| + | La biblioteca **os** nos proporciona la función **os.walk(// | ||
| + | |||
| + | En cada iteración del bucle for, la función **walk()** devuelve: | ||
| + | * String con el directorio actual. | ||
| + | * Una lista de strings con sus subdirectorios. | ||
| + | * Una lista de strings con sus archivos. | ||
| + | |||
| + | <code python> | ||
| + | ''' | ||
| + | C:/ | ||
| + | delicius | ||
| + | cats | ||
| + | catnames.txt | ||
| + | zophie.jpg | ||
| + | walnut | ||
| + | waffles | ||
| + | butter.txt | ||
| + | spam.txt | ||
| + | | ||
| + | ''' | ||
| + | import os | ||
| + | |||
| + | for folderName, subfolders, filenames in os.walk(' | ||
| + | print(' | ||
| + | |||
| + | for subfolder in subfolders: | ||
| + | print(' | ||
| + | |||
| + | for filename in filenames: | ||
| + | print(' | ||
| + | |||
| + | print('' | ||
| + | </ | ||
| + | |||
| + | <code python> | ||
| + | The current folder is C: | ||
| + | SUBFOLDER OF C: | ||
| + | SUBFOLDER OF C: | ||
| + | FILE INSIDE C: | ||
| + | |||
| + | The current folder is C: | ||
| + | FILE INSIDE C: | ||
| + | FILE INSIDE C: | ||
| + | |||
| + | The current folder is C: | ||
| + | SUBFOLDER OF C: | ||
| + | |||
| + | The current folder is C: | ||
| + | FILE INSIDE C: | ||
| + | </ | ||
| + | ===== Trabajar con archivos comprimidos ZIP ===== | ||
| + | Para trabajar con archivos comprimidos en ZIP, (extensión .zip) usaremo el módulo **zipfile**.\\ | ||
| + | La forma de trabajar es muy similar, asignando a tipos de datos ZipFile (similares a Path) el archivo comprimido con el que trabajaremos para gestionar sus datos. | ||
| + | |||
| + | ==== Leer ZIP ==== | ||
| + | Para leer archivos comprimidos en ZIP: | ||
| + | - Asignamos el archivo a una variable ZipFile con el método ZipFile del módulo zipfile.< | ||
| + | - Podemos listar el contenido con el método **namelist()**, | ||
| + | - Podemos obtener información de cualquier achivo comprimido en ZIP con el método **getinfo(// | ||
| + | spamInfo.file_size | ||
| + | spamInfo.compress_size</ | ||
| + | - Una vez hemos terminado de leer en el interior del archivo comprimido, lo cerramos con el métoo close(). <code python> | ||
| + | |||
| + | |||
| + | ==== Extraer ZIP ==== | ||
| + | Para extraer todo el contenido de un ZIP, se utiliza el método **extractall()**, | ||
| + | <code python> | ||
| + | import zipfile, os | ||
| + | from pathlib import Path | ||
| + | |||
| + | p = Path.home() | ||
| + | exampleZip = zipfile.ZipFile(p / ' | ||
| + | exampleZip.extractall() | ||
| + | exampleZip.close() | ||
| + | </ | ||
| + | |||
| + | Para extraer un archivo concreto se usa el método **extract()**, | ||
| + | <code python> | ||
| + | >>> | ||
| + | ' | ||
| + | >>> | ||
| + | ' | ||
| + | >>> | ||
| + | </ | ||
| + | ==== Crear y añadir a ZIP ==== | ||
| + | Para crear un nuevo archivo ZIP, se utiliza el método **ZipFile()**, | ||
| + | * Su primer argumento será el nombre de archivo. | ||
| + | * El segundo argumento será | ||
| + | * ' | ||
| + | * ' | ||
| + | |||
| + | Para añadir elementos (archivos y directorios) al ZIP, se usará el método **write()**: | ||
| + | * El primer argumento será un string del archivo o directorio a comprimir. | ||
| + | * El segundo argumento será el algoritmo de comprensión que se usará, por ejemplo ZIP_DEFLATED, | ||
| + | |||
| + | <code Python> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | </ | ||
python/archivos.1649327957.txt.gz · Última modificación: por alberto
