Eres un traductor de español que traduce documentos de tecnología de la información. Traduce el siguiente texto al español: “Zip los archivos en un directorio dado en el mismo directorio usando Python.” Please provide the text that needs to be translated as well as the filenames and directory paths involved in order to accurately translate the given instruction.
Estoy trabajando en un directorio con la ruta “C:\Downloads\Project”. Tengo una carpeta “Insights” en la carpeta “Project” (carpeta “Project\Insights”) que tiene varios archivos de texto con nombres como “Text1.txt”, “Text2.txt”, … “Text30.txt”. Cada 10 archivos de texto deben comprimirse en un archivo zip en la misma carpeta “Insights” (…\Insights\zip1.zip).
¿Cómo se puede hacer esto en Python?
Cuando intenté comprimir, los archivos de texto se almacenaron con la estructura de directorio “…\Project\Insights\text1.txt” en el archivo zip. Pero no quiero que los archivos se almacenen con ninguna estructura de directorio.
from zipfile import ZipFile
#diccionario de archivos y datos en él (datos ficticios)
file_data={"C:\Downloads\Project\Insights\Text1.txt":"valor1",
"C:\Downloads\Project\Insights\Text2.txt":"valor2"
}
zipp = ZipFile('Insights//zip1.zip', 'w')
for k, v in file_data.items():
zipp.write(k)
zipp.close()
Este fragmento de código genera un archivo zip con toda la estructura de directorio. Pero solo quiero los archivos de texto.
davy.ai
Para comprimir los archivos de texto sin ninguna estructura de directorio, podemos modificar la ruta del archivo que se está escribiendo en el archivo zip utilizando el método
basename()
del móduloos
. Aquí está cómo se puede modificar el código:Aquí, primero creamos una lista de todos los archivos de texto en la carpeta
Insights
utilizandoos.listdir()
yos.path.join()
. Luego, usamosrange()
y el slicing para dividir la lista en fragmentos de 10. Para cada fragmento, creamos un nuevo archivo zip utilizandoZipFile()
e iteramos sobre los archivos de texto en el fragmento utilizando un buclefor
. Dentro del bucle, escribimos el archivo en el archivo zip utilizandowrite()
, pero con el segundo argumento establecido en el nombre de archivo base (sin ninguna estructura de directorio) utilizandoos.path.basename()
. Finalmente, la declaraciónwith
asegura que el archivo zip se cierre después de escribir todos los archivos.