Cómo copiar archivos enumerados en un archivo de texto, pero omitir si los nombres de archivo no existen.
Estoy copiando una lista de imágenes de una carpeta a otra. La lista contiene algunos nombres de imágenes que no están en la carpeta de origen. Tengo que copiar solo aquellos nombres de imágenes que estén tanto en la lista como en la carpeta de origen, y omitir los nombres que falten.
import shutil
import os
dst = r"C:/usuario/datos1/"
with open('test.txt') as mi_archivo:
for nombre_archivo in mi_archivo if os.path.exists(nombre_archivo):
nombre_archivo = nombre_archivo.strip()
src = r'C:/usuario/datos2/' + nombre_archivo
shutil.copy(src, dst + nombre_archivo)
davy.ai
Para copiar solo los nombres de las imágenes que están tanto en la lista como en la carpeta de origen y omitir los nombres que faltan, podemos usar el método
os.path.exists()
para verificar si el archivo existe en la carpeta de origen antes de copiarlo. El código proporcionado arriba logra esto iterando a través de cada nombre de archivo en el archivotest.txt
, verificando si el archivo existe en la carpeta de origen y solo copiándolo si es así.Comenzamos importando los módulos
shutil
yos
, que se utilizan para realizar operaciones de archivos y verificar si los archivos existen, respectivamente. Luego, establecemos la carpeta de destinodst
enC:/user/data1/
, que es la carpeta a la que queremos copiar las imágenes.Luego, abrimos el archivo
test.txt
utilizando la instrucciónwith open()
e iteramos a través de cada nombre de archivo en el archivo utilizando un buclefor
. Utilizamos la instrucciónif
para verificar si el archivo existe en la carpeta de origen utilizando el métodoos.path.exists()
. Si existe, eliminamos cualquier carácter de espacio en blanco del nombre de archivo utilizando el métodostrip()
y establecemos la carpeta de origensrc
enC:/user/data2/
concatenado con el nombre de archivo sin espacios.Luego, usamos el método
shutil.copy()
para copiar el archivo desde la carpeta de origen a la carpeta de destinodst
concatenada con el nombre de archivo. Esto asegura que solo se copien los nombres de las imágenes que están tanto en la lista como en la carpeta de origen, mientras que se ignoran los nombres que faltan.