如何使用 glob 获取 2018 年后修改的 csv 文件列表?

how to get list of csv files modified after 2018 using glob?

我有一个远程目录,其中包含 10000 个不同扩展名的文件。每个文件都是从2015年一路创建的。

我只想获取 2018 年之后修改的 CSV 文件。

filter = 2018
files = sorted(Path(directory).iterdir(), key=os.path.getmtime)
final = list()
for file in files:
    if datetime.fromtimestamp(os.path.getmtime(directory/file)) >= datetime(filter, 1, 1):
        final.append(re.search('([a-z]+)([0-9]{4}).csv',file).group(0))

以上代码效率低下。我列出所有文件,然后检查修改年份,然后检查文件是否 csv

我找到了以下内容,

from glob import glob
files = glob('*.csv')

这仅列出 csv 个文件。来自 glob 的正则表达式模式匹配是有限的,所以我决定在使用 glob.

列出 csv 文件后使用 re 模块

有什么方法可以使用 glob 根据年份进行过滤吗?

或者只是常规的 ol' 循环。即,

[f for f in files if datetime.fromtimestamp(os.path.getmtime(directory/f)) >= datetime(filter, 1, 1)]

如果您正在使用 python3,您可以尝试使用 os.scandir。 根据文档

Using scandir() instead of listdir() can significantly increase the performance of code that also needs file type or file attribute information

import datetime, os
path = "."
cutoff_date = datetime.datetime(2021,9,1).timestamp()
csvfiles = [ f.name for f in os.scandir(path) if f.is_file() 
            and f.stat().st_mtime > cutoff_date and f.name.endswith(".csv") ]