Herramientas de usuario

Herramientas del sitio


python:archivos

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
python:archivos [2022/04/07 13:16] – [Recorrer un árbol de directorios] albertopython: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 'close()'. \\ 
 +Un ejemplo:
 +<code python>
 +with open('file_path', 'w') as file:
 +    file.write('hello world !')
 +</code>
 ===== Guardar variables ===== ===== Guardar variables =====
 ==== Guardar variables en archivos binarios ==== ==== Guardar variables en archivos binarios ====
Línea 257: Línea 264:
  
 ===== Recorrer un árbol de directorios ===== ===== Recorrer un árbol de directorios =====
 +La biblioteca **os** nos proporciona la función **os.walk(//string//)**, que usada en conjunto con un bucle for (en lugar de range()), en cada iteración se mueve por los directorios del árbol, lo que  permite recorrer el arbol de directorios:\\
  
 +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('C:\\delicious'):
 +    print('The current folder is ' + folderName)
 +
 +    for subfolder in subfolders:
 +        print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
 +
 +    for filename in filenames:
 +        print('FILE INSIDE ' + folderName + ': '+ filename)
 +
 +    print('')
 +</code>
 +
 +<code python>
 +The current folder is C:\delicious
 +SUBFOLDER OF C:\delicious: cats
 +SUBFOLDER OF C:\delicious: walnut
 +FILE INSIDE C:\delicious: spam.txt
 +
 +The current folder is C:\delicious\cats
 +FILE INSIDE C:\delicious\cats: catnames.txt
 +FILE INSIDE C:\delicious\cats: zophie.jpg
 +
 +The current folder is C:\delicious\walnut
 +SUBFOLDER OF C:\delicious\walnut: waffles
 +
 +The current folder is C:\delicious\walnut\waffles
 +FILE INSIDE C:\delicious\walnut\waffles: butter.txt
 +</code>
 ===== Trabajar con archivos comprimidos ZIP ===== ===== 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.<code python>exampleZip = zipfile.ZipFile(Path.wcd()/'ham'/'meat.zip')</code>
 +  - Podemos listar el contenido con el método **namelist()**, que devuelve una lista de strings con las direcciones relativas del contenido. <code python>exampleZip.namelist()</code>
 +  - Podemos obtener información de cualquier achivo comprimido en ZIP con el método **getinfo(//nombre_archivo//)**. Devuelve un objeto en el que se pueden consultar los atributos **file_size** y **compress_size**. <code python>spamInfo = exampleZip.getinfo('spam.txt')
 +spamInfo.file_size
 +spamInfo.compress_size</code>
 +  - Una vez hemos terminado de leer en el interior del archivo comprimido, lo cerramos con el métoo close(). <code python>exampleZip.close()</code>
 +
 +
 +==== Extraer ZIP ====
 +Para extraer todo el contenido de un ZIP, se utiliza el método **extractall()**, al que se le puede pasar un argumento string en el que se define la dirección en la que se desea extraer. Si no, se extraerá en el directorio raíz.
 +<code python>
 +import zipfile, os
 +from pathlib import Path
 +
 +p = Path.home()
 +exampleZip = zipfile.ZipFile(p / 'example.zip')
 +exampleZip.extractall()  # exampleZip.extractall('C:\\delicious') # Para extraerlo en una diección concreta.
 +exampleZip.close()
 +</code>
 +
 +Para extraer un archivo concreto se usa el método **extract()**, en la que el primer argumento es el archivo a extraer, y el segundo (opcional), la dirección en la que se extraerá (si no existe, se crea).
 +<code python>
 +>>>exampleZip.extract('spam.txt')
 +'C:\\spam.txt'
 +>>> exampleZip.extract('spam.txt', 'C:\\some\\new\\folders')
 +'C:\\some\\new\\folders\\spam.txt'
 +>>> exampleZip.close()
 +</code>
 +==== Crear y añadir a ZIP ====
 +Para crear un nuevo archivo ZIP, se utiliza el método **ZipFile()**, al iguar que se hacía para leer de su interior:
 +  * Su primer argumento será el nombre de archivo.
 +  * El segundo argumento será 
 +    * 'w' para añadir archivos o directorios, sobreescribiendo los que había antes.
 +    * 'a' para añadir archivos o directorios sin sobreescribir los que había antes.
 +
 +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, que va bien con cualquier tipo de dato).
 +
 +<code Python>
 +>>> import zipfile
 +>>> newZip = zipfile.ZipFile('new.zip', 'w')
 +>>> newZip.write('spam.txt', compress_type=zipfile.ZIP_DEFLATED)
 +>>> newZip.close()
 +</code>
python/archivos.1649330182.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki