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

Posted

技术标签:

【中文标题】在 python 中使用 glob.glob 和 os.path.join 创建变量路径【英文标题】:Create a variable path using glob.glob and os.path.join in python 【发布时间】:2022-01-24 04:43:07 【问题描述】:

我正在使用 Python 3.6,并且想知道如何创建变量路径以根据更改的年份文件夹定位文件。我有以下文件路径:

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

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

for name in glob.glob(r'C:\Users\al123\Desktop\scripts_test\tutorials\2021\**\*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)

我需要进行哪些更改才能使其正常工作?

【问题讨论】:

【参考方案1】:

这是一种略有不同的方法,但您可以将其转换为 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\tutorials\2001\**\*notes*.txt

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

【讨论】:

与我尝试做的相比,这是一种更优雅的方法。它工作得很好。谢谢。【参考方案2】:

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

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

【讨论】:

以上是关于在 python 中使用 glob.glob 和 os.path.join 创建变量路径的主要内容,如果未能解决你的问题,请参考以下文章

Python glob 模块

python glob模块

Python glob.glob():在文件名的一部分上找到完全匹配

在 python 中将普通文件名与 fnmatch 模式分开

如何使用 os.walk 或 glob.glob 获取目录中所有类型的文件扩展名

python 获取文件下文件个数