Inicialmente estaba pensando en usar os.path.isdir
pero no creo que esto funcione para archivos zip. ¿Hay alguna manera de echar un vistazo al archivo comprimido y verificar que este directorio exista? Me gustaría evitar el uso de unzip -l "[email protected]"
tanto como sea posible, pero si esa es la única solución, entonces supongo que no tengo otra opción.Compruebe si existe un directorio en un archivo zip con Python
Respuesta
Simplemente marque el nombre del archivo con "/" al final de la misma.
import zipfile
def isdir(z, name):
return any(x.startswith("%s/" % name.rstrip("/")) for x in z.namelist())
f = zipfile.ZipFile("sample.zip", "r")
print isdir(f, "a")
print isdir(f, "a/b")
print isdir(f, "a/X")
Se utiliza esta línea de
any(x.startswith("%s/" % name.rstrip("/")) for x in z.namelist())
porque es posible que no contiene ningún archivo de directorio de forma explícita; solo un camino con un nombre de directorio.
resultado de la ejecución:
$ mkdir -p a/b/c/d
$ touch a/X
$ zip -r sample.zip a
adding: a/ (stored 0%)
adding: a/X (stored 0%)
adding: a/b/ (stored 0%)
adding: a/b/c/ (stored 0%)
adding: a/b/c/d/ (stored 0%)
$ python z.py
True
True
False
Puede consultar los directorios con ZipFile.namelist().
import os, zipfile
dir = "some/directory/"
z = zipfile.ZipFile("myfile.zip")
if dir in z.namelist():
print "Found %s!" % dir
Esto funciona para archivos pero no directorios :(al menos no para mí –
Intenta imprimir la 'lista de nombres()' de tu archivo .zip para asegurarte de que tu directorio está formateado correctamente. – enderskill
Sí, me aseguré de que el directorio esté Estoy tratando de hacerlo para los archivos docx, que son archivos zip de todos modos, así que no debería importar ¿verdad? –
Esto se puede hacer mediante el ZipFile biblioteca incorporada.
import zipfile
z = zipfile.ZipFile("file.zip")
if "DirName/" in [member.filename for member in z.infolist()]:
print("Directory exists in archive")
Probado y funcional con Python32.
Por las razones que sean, no funciona para los archivos docx. :( –
Está intentando usar un archivo docx en lugar de un archivo zip? Cambie el nombre de la extensión a .zip e inténtelo de nuevo, debería funcionar. – Lanaru
Funciona bien descomprimir y puedo conseguir que imprima todos los archivos. La "palabra" de directorio no está en la lista de nombres(), sino en archivos individuales, como word/webSettings.xml, por lo que no se está obteniendo una coincidencia. –
- 1. Compruebe si existe un directorio en PHP
- 2. Compruebe si existe un archivo/directorio: ¿hay una mejor manera?
- 3. Compruebe si existe un nodo en h5py
- 4. Compruebe si existe un archivo en el servidor
- 5. Compruebe si existe un objeto en VBScript
- 6. Compruebe que existe un * tipo * de archivo en Python
- 7. Compruebe si existe un valor en ArrayList
- 8. Compruebe si el archivo tiene un formato CSV con Python
- 9. Compruebe si el archivo existe en ksh
- 10. compruebe si el archivo existe en php
- 11. bash: compruebe si existe un archivo remoto usando scp
- 12. ¿Cómo comprobar si existe un directorio que contiene un archivo?
- 13. C compruebe si el archivo existe
- 14. Compruebe si existe una carpeta en un directorio y créelas con C#
- 15. comprobando si el archivo existe en un directorio específico
- 16. Compruebe si un directorio es un (sistema de archivos) raíz
- 17. Compruebe si existe un servicio web
- 18. PHP: compruebe si existe un nodo XML con el atributo
- 19. python: compruebe si existe url a jpg
- 20. compruebe si un archivo está abierto en Python
- 21. Compruebe si un directorio está vacío usando C en Linux
- 22. Compruebe si existe tabla
- 23. Crear un archivo ZIP cifrado en Python
- 24. open() en Python no crea un archivo si no existe
- 25. Compruebe si un archivo es de archivo (zip o rar) usando php
- 26. ¿Cómo puedo averiguar si un archivo es un archivo o directorio si no existe?
- 27. Compruebe si un archivo PDF es válido (Python)
- 28. Python: compruebe si un archivo está vacío o no
- 29. python zipfile, ¿cómo sé si un artículo es un directorio?
- 30. Cómo verificar si existe un directorio/archivo/enlace simbólico con un comando en Ruby
Gracias! Bueno, esto funcionó con la muestra que proporcionó. Pero estoy tratando de hacer esto para los archivos docx. Básicamente estoy comprobando si el archivo zip contiene el directorio "palabra", pero me está dando respuestas falsas :( –
Simplemente intente imprimir la lista de archivos en su 'docx' y vea qué tiene de extraño:' print zipfile.ZipFile ("sample.docx", "r"). Namelist() ' –
Supongo que tienes algún prefijo antes de 'word'. Compruébelo por favor. –