Python: una carpeta comprimida no se puede extraer mediante un archivo tar

CorePress2023-11-30  1

Para un script de compilación escrito en Python, necesitaría extraer el contenido de un archivo .tar.gz (esta es la fuente de Lua).

En la documentación del archivo tar, un archivo con dicha extensión se puede extraer de esta manera. Reemplacé su archivo de ejemplo con el archivo que quiero extraer:

import tarfile

tar = tarfile.open("lua-5.3.5.tar.gz")
tar.extractall()
tar.close()

Python no obstante devuelve una excepción:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    tar = tarfile.open("lua-5.3.5.tar.gz")
  File "C:\Python37\lib\tarfile.py", line 1578, in open
    raise ReadError("file could not be opened successfully")
tarfile.ReadError: file could not be opened successfully

Por supuesto, ejecuto este script en la misma carpeta que el archivo, pero no puede extraer el contenido.

¿Cómo solucionamos este problema?

  • 2A pesar de las respuestas publicadas aquí hasta ahora, el código que estás intentando usar debería funcionar bien sin modificaciones (al menos, usando tarfile con Python 3.7 puedo abrir y extraer un .tar.gz sin ningún parámetro adicional ). ¿Puede indicarnos el archivo tar específico que está intentando descomprimir? ¿Y has verificado que funciona correctamente al usar tar cli? -larsks 7 de junio de 2020 a las 13:28
  • Sí, lo es. Publiqué una respuesta, la reinstalación.La integración del entorno Python parece haber resuelto el problema. - Astuto 7 de junio de 2020 a las 13:43


------------------------

Resulta que después de reinstalar el entorno Python (nadie se arriesga, no gana), funcionó. Me frustra un poco no entender qué causó el error, probablemente archivos corruptos, pero actualizo mis paquetes con frecuencia, es extraño.



------------------------

import tarfile

tar = tarfile.open("lua-5.3.5.tar.gz", "w|gz")
tar.extractall()
tar.close()
2
  • Gracias por tu respuesta. La excepción ya no aparece, sin embargo, parece que no se extraen archivos, el archivo, por otro lado, parece ser sobrescrito por un nuevo archivo vacío. ¿Tiene alguna idea de cómo solucionar este problema? Al buscar en la documentación y en Internet, el código que escribiste debería coincidir con las expectativas, pero aparentemente no funciona en mi caso. - Astuto 7 de junio de 2020 a las 12:41
  • 1 Edite su respuesta para explicar cómo responde a la pregunta. Pensamientos de dragón 8 de junio de 2020 a las 8:11


------------------------

Ese archivo es en realidad un archivo tar.gz, por lo tanto debes hacer algo como esto:

import tarfile
tar = tarfile.open("lua-5.3.5.tar.gz", "r:gz")
tar.extractall()
tar.close()
1
  • fileobj = self.myfileobj = buildins.open(nombre de archivo, modo o 'rb') FileNotFoundError: [Errno 2] No existe tal archivo o directorio: 'lua-5.3.5.tar. gz' - Shivam Bharadwaj 7 de junio de 2020 a las 12:13
Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare