在 python 中使用 glob.glob 和 os.path.join 创建可变路径

Create a variable path using glob.glob and os.path.join in python

我正在使用 Python 3.6,想知道如何创建一个可变路径以根据发生变化的年份文件夹定位文件。我有以下文件路径:

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

此代码为我提供了名称中包含“notes”一词的正确文件:

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

但是,有一个 2021 文件夹和一个 2022 文件夹,我希望它根据今天的日期动态变化。我将有一个变量 b,它根据今天的日期给出年份。假设年份文件夹之前的路径相同,当我尝试使用 os.path.join 添加年份的变量 b 时,它什么也没给我:

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)

我需要更改什么才能使其正常工作?

这是一种略有不同的方法,但您可以将其转换为 lambda 表达式:

plain_path = r'C:\Users\al123\Desktop\scripts_test\tutorials\{year}\**\*notes*.txt'
variable_path = lambda year: plain_path.format(year=year)

print(variable_path(2001))
# C:\Users\al123\Desktop\scripts_test\tutorials01\**\*notes*.txt

print(variable_path(2002))
# C:\Users\al123\Desktop\scripts_test\tutorials02\**\*notes*.txt

您忘记了 recursive=True 关键字参数:

for name in glob.glob(os.path.join(a,b,c), recursive=True):
    print(name)