我在
这样的文件夹中有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' ]
由于
答案 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]