如何使用 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") ]
我有一个远程目录,其中包含 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") ]