Bucle For y reemplazo de parte de una cadena en rutas basado en dos columnas de un dataframe en Python.
Intento iterar archivos de Excel en un directorio con el código siguiente:
import glob
import pandas as pd
files = glob.glob('./*.xlsx')
for file_path in files:
print(file_path)
Salida:
./data\S273-2021-12-09.xlsx
./data\S357-2021-12-09.xlsx
./data\S545-2021-12-09.xlsx
./data\S607-2021-12-09.xlsx
Ahora quiero reemplazar S273
, S357
, etc. basado en el dataframe df
para mapear old_name
a new_name
:
old_name new_name
0 S273 a
1 S357 b
2 S545 c
3 S607 d
4 S281 e
Para convertir el dataframe en un diccionario si es necesario: name_dict = dict(zip(df.old_name, df.new_name))
El resultado esperado sería:
./data\a-2021-12-09.xlsx
./data\b-2021-12-09.xlsx
./data\c-2021-12-09.xlsx
./data\d-2021-12-09.xlsx
¿Cómo puedo lograrlo en Python? Agradezco sinceramente su ayuda.
EDICIÓN:
for file_path in files:
for key, value in name_dict.items():
if key in str(file_path):
new_path = file_path.replace(key, value)
print(new_path)
El código de arriba funciona, si es posible, se aceptan otras soluciones.
davy.ai
Para lograr el cambio de nombre de los archivos según la asignación en el dataframe
df
, puedes utilizar un bucle for para iterar a través de la listafiles
y otro bucle for anidado para iterar a través del diccionarioname_dict
. Luego, utilizando el métodoreplace()
de las cadenas de texto, puedes reemplazar el nombre antiguo con el nuevo en la ruta del archivo. Así es como puedes modificar el código:Esto imprimirá las nuevas rutas de los archivos con el nombre antiguo reemplazado por el nuevo. Si deseas realmente cambiar el nombre de los archivos, puedes utilizar la función
os.rename()
:Esto cambiará el nombre de los archivos con el nombre antiguo reemplazado por el nuevo en el directorio.