Comparando dos archivos de texto dentro de archivos zip utilizando Python.
Quiero comparar dos archivos de texto con el mismo nombre y la misma ruta relativa dentro de dos archivos zip diferentes utilizando Python.
He estado intentando buscar varias formas y no he encontrado ninguna de las soluciones principales disponibles que funcione en mi caso.
Mi código:
from zipfile import ZipFile
from pathlib import Path
with ZipFile(zip_path1) as z1, ZipFile(zip_path2) as z2:
file1_paths = [Path(filepath) for filepath in z1.namelist()]
file2_paths = [Path(filepath) for filepath in z2.namelist()]
cmn = list(set(file1_paths).intersection(set(file2_paths)))
common_files = [filepath for filepath in cmn if str(filepath).endswith(('.txt', '.sh'))]
for f in common_files:
with z1.open(f, 'r') as f1, z2.open(f, 'r') as f2:
if f1.read() != f2.read():
print('Diferencia encontrada en {filepath}'.format(filepath=str(f)))
Nota:
He utilizado pathlib para las rutas aquí. En la línea with z1.open(f, 'r')...
si uso rutas de pathlib en lugar de codificar la ruta, obtengo el error “No hay ningún elemento llamado WindowsPath(‘SomeFolder/somefile.txt’) en el archivo”.
Además, incluso si codifico la ruta, el búfer de lectura del archivo que se utiliza para la comparación siempre viene vacío. Por lo tanto, la comparación no funciona en realidad en este caso.
Estoy atrapado en este caso curioso y cualquier ayuda es muy apreciada.
davy.ai
Solución para comparar dos archivos de texto con el mismo nombre y la misma ruta relativa dentro de dos archivos zip diferentes usando Python
Para comparar dos archivos de texto con el mismo nombre y ruta relativa dentro de dos archivos zip diferentes utilizando Python, se pueden seguir los siguientes pasos:
zipfile
ypathlib
.ZipFile()
y almacenarlos en variables, por ejemplo,z1
yz2
.namelist()
y la funciónPath()
.intersection()
y almacenarlos en una nueva lista llamadacmn
.cmn
filtrando los archivos que no terminan con.txt
o.sh
.open()
y comparar su contenido utilizando el métodoread()
.Nota: Es importante convertir los objetos
Path
a objetosstr
utilizando la funciónstr()
, ya que el métodoopen()
espera objetosstr
como entrada.La solución anterior debería ser capaz de comparar dos archivos de texto con el mismo nombre y ruta relativa dentro de dos archivos zip diferentes utilizando Python.