Nuestra libreria química "MolPort-v7" tiene más de 20 millones de compuestos dividos en ficheros SDF de 3000 moléculas cada uno. Estos ficheros que contienen los "ligandos" se copian dentro de una carpeta con el mismo nombre que el fichero ligandos_ligands.sdf y el fichero receptor_receptor.sce para ejecutar una simulación de "molecular docking". Cuando se termina la simulación se genera un fichero.log con los resultados tabulados, además de todos los ficheros.yob con la mejor pose de cada ligando testado.
El siguiente script de Python usa el fichero /LUSTRE/home/jant.encinar.umh.es/py-linux/38_procesa_carpetas-DOCKING-to_fin/04_hechos.txt, que contiene una lista con nombres en columna de aquellas subcarpetas dentro de la ruta /LUSTRE/home/jant.encinar.umh.es/runDC/ en las que la simulación de docking ha terminado. Y sabemos que ha terminado porque se ha generado un fichero.log. De cada carpeta borrará todos los ficheros que se indican en las líneas 6, 7 y 8 del script. Solo dejará los ficheros.yob y el fichero.log. Además renombra la carpeta añadiendo a su nombre la extensión _fin.
import os
# Rutas necesarias
base_path = "/LUSTRE/home/jant.encinar.umh.es/runDC/" #ruta donde está cada carpeta con lig+receptor
hechos_file = "/LUSTRE/home/jant.encinar.umh.es/py-linux/38_procesa_carpetas-DOCKING-to_fin/04_hechos.txt"
extensions_to_remove = [
".adr", ".sdf", ".sce", ".err", "out", "_bestposes.pdb",
"_bestposes.sdf", "_checkpoint.sce"
]
def delete_files_and_rename_folders():
try:
# Leer los nombres de carpetas desde el archivo
with open(hechos_file, 'r') as f:
folder_names = [line.strip() for line in f if line.strip()]
for folder_name in folder_names:
folder_path = os.path.join(base_path, folder_name)
# Verificar si la carpeta existe
if not os.path.isdir(folder_path):
print(f"Carpeta no encontrada: {folder_path}")
continue
# Eliminar archivos con las extensiones especificadas
for root, dirs, files in os.walk(folder_path):
for file in files:
if any(file.endswith(ext) for ext in extensions_to_remove):
file_path = os.path.join(root, file)
try:
os.remove(file_path)
print(f"Archivo eliminado: {file_path}")
except Exception as e:
print(f"Error al eliminar {file_path}: {e}")
# Renombrar la carpeta anadiendo "_fin"
new_folder_path = f"{folder_path}_fin"
try:
os.rename(folder_path, new_folder_path)
print(f"Carpeta renombrada: {folder_path} -> {new_folder_path}")
except Exception as e:
print(f"Error al renombrar {folder_path}: {e}")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
delete_files_and_rename_folders()