如何使用python提取具有日期模式的文件

时间:2017-07-03 07:50:47

标签: regex python-2.7 date

我在

这样的文件夹中有n个文件

source_dir

 abc_2017-07-01.tar   
 abc_2017-07-02.tar 
 abc_2017-07-03.tar 
 pqr_2017-07-02.tar

现在考虑使用单一模式' abc'

(但我从数据库中随机获取此模式,因此需要双重过滤,一个用于模式,一个用于最后一天)

我想提取最后一天的文件,即' 2017-07-02'

在这里,我可以获得常见文件但不是精确的last_day文件

代码

pattern = 'abc'
allfiles=os.listdir(source_dir)
m_files=[f for f in allfiles if str(f).startswith(pattern)]
print m_files

输出

  [ 'abc_2017-07-01.tar' ,  'abc_2017-07-02.tar' , 'abc_2017-07-03.tar' ] 

这给了我所有与abc模式相关的文件,但是如何过滤出该模式的最后一天文件

预期:

 [ 'abc_2017-07-02.tar' ]

由于

3 个答案:

答案 0 :(得分:2)

只需对代码进行一次小调整即可获得所需的结果。

import os
from datetime import datetime, timedelta

allfiles=os.listdir(source_dir)
file_date = datetime.now() + timedelta(days=-1)
pattern = 'abc_' +str(file_date.date())
m_files=[f for f in allfiles if str(f).startswith(pattern)]

希望这有帮助!

答案 1 :(得分:0)

latest = max(m_files, key=lambda x: x[-14:-4])

将在m_files中的文件名中找到包含最新日期的文件名。

答案 2 :(得分:0)

使用python regex包,如:

xxx

然后你可以在循环中工作,做你想做的事。就像创建那个列表一样:

    import re 
    import os 

    files = os.listdir(source_dir)
    for file in files: 
            match = re.search('abc_2017-07-(\d{2})\.tar', file)
            day = match.group(1)

如果月份也是变量,您可以将“ 07 ”替换为“ \ d \ d ”或“ \ d {2} ”。如果您的文件根本不匹配模式,请小心,然后 match.group()将导致错误,因为匹配类型为none。然后使用:

    import re 
    import os 

    def extract_day(name):
        match = re.search('abc_2017-07-(\d{2})\.tar', file)
        day = match.group(1)
        return day 


    files = os.listdir(source_dir)
    days = [extract_day(file) for file in files]