按日期顺序筛选字符串列表,其中日期是字符串的一部分

2024-09-28 03:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我以xxxx\u 2019-05-20.txt格式创建一个文件名列表,其中包含目录中的所有文件。我使用os.listdir('path')来构建列表

我想创建第二个列表,只包含2019-01-01之后的文件

有没有一种方法可以做到这一点,而不必遍历每个文件名,从文件名中提取日期,并将其与filterdate(2019-01-01)进行比较

我可以做到以上,唯一的问题是我可以在非常大的目录,所以我只是想知道是否有一个更聪明的方法来做到这一点。谢谢你的帮助


Tags: 文件path方法目录txt列表os文件名
1条回答
网友
1楼 · 发布于 2024-09-28 03:23:03

我认为时间在这里不是问题。我用100万个假文件名构建了一个工作流,它对我来说工作了2.5秒(我有一台普通的电脑)。此外,我使用正则表达式来提取年份,所以如果您想要更简单的解决方案,它会更快

import timeit

s="""from random import choice
import re

names = ('WAKA', 'waka', 'waka-waka', 'wattafak')
dates = ('2018-12-01', '2018-01-01', '2019-01-01', '2019-02-03')

filenames = (
    choice(names) + '_' + choice(dates) + '.txt'
    for _ in range(1000000)
)

def check_filenames_regex(filenames):
    REGEX = re.compile(r'.*_(?P<year>\d{4})-\d\d-\d\d\..+')
    result = []
    for f in filenames:
        r = REGEX.match(f)
        if r:
            year = r.group('year')
            if int(year) >= 2019:
                result.append(f)
    return result
"""

timeit.timeit('check_filenames_regex(filenames)', setup=s)

退货:

2.742631300352514

如果文件夹中的文件少于几千万个,那么简单的暴力解决方案应该不是问题

相关问题 更多 >

    热门问题