es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Crea una variable de ruta utilizando glob.glob y os.path.join en Python.

Estoy usando Python 3.6 y me gustaría saber cómo crear una variable de ruta para localizar un archivo basado en una carpeta de año que cambia. Tengo la siguiente ruta de archivo:

C:\Users\al123\Desktop\scripts_test\tutorials\2021\Conference\Notes\single notes\Conference notes content.txt

Este código me devuelve los archivos correctos con la palabra “notes” en el nombre:

for name in glob.glob(r'C:\Users\al123\Desktop\scripts_test\tutorials\2021\**\*notes*.txt', recursive=True):
    print(name)

Sin embargo, hay una carpeta llamada 2021 y otra llamada 2022, y quiero que cambie dinámicamente en función de la fecha de hoy. Tendré una variable b que me dará el año en función de la fecha de hoy. Asumiendo que la ruta antes de la carpeta de año es la misma, cuando intento agregar la variable b para el año usando os.path.join, no obtengo nada:

a = r'C:\Users\al123\Desktop\scripts_test\tutorials'
b = (date.today() - timedelta(days=1)).strftime('%Y')
c = r'**\*notes*.txt'
for name in glob.glob(os.path.join(a, b, c)):
    print(name)

¿Qué necesito cambiar para que funcione?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para que la función os.path.join funcione correctamente, es necesario incluir la carpeta que contiene la carpeta del año en la llamada a os.path.join. En este caso, la carpeta que contiene la carpeta del año es tutorials, por lo que debes cambiar el código al siguiente:

    a = r'C:\Users\al123\Desktop\scripts_test\tutorials'
    b = (date.today() - timedelta(days=1)).strftime('%Y')
    c = r'**\*notes*.txt'
    for name in glob.glob(os.path.join(a, b, c), recursive=True):
        print(name)
    

    En este código, la llamada a os.path.join une a ('C:\Users\al123\Desktop\scripts_test\tutorials'), b ('2021' o el año actual) y c (r'**\*notes*.txt'). El argumento recursive=True indica a glob.glob que busque de forma recursiva en los subdirectorios los archivos que coincidan con el patrón.

    Con este código, deberías ser capaz de ubicar dinámicamente archivos basados en el año actual.

Comments are closed.