Python从列表中获取最新文件
我有这样一个文件列表:Python从列表中获取最新文件,python,Python,我有这样一个文件列表: my_list=['l.txt','PPT_6_202008062343HLC.txt','PPT_6_202008070522HLC.txt','PPT_12_202008062343HLC.txt','PPT_12_202008070522HLC.txt'] final_list= ['PPT_6_202008070522HLC.txt', 'PPT_12_202008070522HLC.txt', 'l.txt'] 我想有一个最新的文件列表,以ppt_6和ppt
my_list=['l.txt','PPT_6_202008062343HLC.txt','PPT_6_202008070522HLC.txt','PPT_12_202008062343HLC.txt','PPT_12_202008070522HLC.txt']
final_list=
['PPT_6_202008070522HLC.txt', 'PPT_12_202008070522HLC.txt', 'l.txt']
我想有一个最新的文件列表,以ppt_6和ppt_12开头,并保留其他元素项,如下所示:
my_list=['l.txt','PPT_6_202008062343HLC.txt','PPT_6_202008070522HLC.txt','PPT_12_202008062343HLC.txt','PPT_12_202008070522HLC.txt']
final_list=
['PPT_6_202008070522HLC.txt', 'PPT_12_202008070522HLC.txt', 'l.txt']
现在我正在这样做:
from datetime import datetime
now = datetime.now()
new_arc=[]
time_6=[]
time_12=[]
for i in my_list:
if i[4:5]=='6':
time_6.append(i)
elif i[4:5]=='1':
time_12.append(i)
else:
new_arc.append(i)
time_6 = [max(t for t in time_6 if datetime.strptime(t[-15:-3], '%Y%m%d%H%M') < now)]
time_12 = [max(t for t in time_12 if datetime.strptime(t[-15:-3], '%Y%m%d%H%M') < now)]
final_list=time_6+time_12+new_arc
从日期时间导入日期时间
now=datetime.now()
新的_弧=[]
时间_6=[]
时间_12=[]
对于我的_列表中的i:
如果我[4:5]=“6”:
时间_6.追加(i)
以利夫一书[4:5]=“1”:
时间_12.追加(i)
其他:
新弧追加(一)
time_6=[最大值(t表示时间为t,如果是datetime.strtime(t[-15:-3],“%Y%m%d%H%m”)
有更好的方法吗?我能想到的最好办法是:
import re
my_list = [
'l.txt','PPT_6_202008062343HLC.txt','PPT_6_202008070522HLC.txt',
'PPT_12_202008062343HLC.txt','PPT_12_202008070522HLC.txt'
]
patterns = (re.compile("PPT_6"), re.compile("PPT_12"))
final_list = [sorted(list(filter(pattern.match, problem_list)))[0]
for pattern in patterns]
final_list += list(filter(re.compile("[^PPT]").match, problem_list))
根据您将要使用的文件名的数量,我认为这不应该太糟糕。我能想到的最好办法是:
import re
my_list = [
'l.txt','PPT_6_202008062343HLC.txt','PPT_6_202008070522HLC.txt',
'PPT_12_202008062343HLC.txt','PPT_12_202008070522HLC.txt'
]
patterns = (re.compile("PPT_6"), re.compile("PPT_12"))
final_list = [sorted(list(filter(pattern.match, problem_list)))[0]
for pattern in patterns]
final_list += list(filter(re.compile("[^PPT]").match, problem_list))
根据您要处理的文件名的数量,我认为这应该不会太糟糕。由于文件名已经有了日期顺序,您可以简单地对它们进行排序。然后按前缀分组(
PPT_6
和PPT_12
)。最后从每组中选出第一行
from itertools import groupby
#get prefix up to nth _
def split_nth(text, n):
grp = text.split('_')
return '_'.join(grp[:n])
my_list =['l.txt','PPT_6_202008062343HLC.txt','PPT_6_202008070522HLC.txt',
'PPT_12_202008062343HLC.txt','PPT_12_202008070522HLC.txt']
sorted_list = sorted(my_list[1:], reverse=True)
groups = groupby(sorted_list, key=lambda x: split_nth(x, 2))
result = [next(v) for _, v in groups]
result.append(my_list[0])
由于文件名已经有了日期顺序,您可以简单地对它们进行排序。然后按前缀分组(
PPT_6
和PPT_12
)。最后从每组中选出第一行
from itertools import groupby
#get prefix up to nth _
def split_nth(text, n):
grp = text.split('_')
return '_'.join(grp[:n])
my_list =['l.txt','PPT_6_202008062343HLC.txt','PPT_6_202008070522HLC.txt',
'PPT_12_202008062343HLC.txt','PPT_12_202008070522HLC.txt']
sorted_list = sorted(my_list[1:], reverse=True)
groups = groupby(sorted_list, key=lambda x: split_nth(x, 2))
result = [next(v) for _, v in groups]
result.append(my_list[0])
这些文件名中的datetime格式允许您不使用datetime函数,字母顺序就足够了 您可以删除与这两个模式匹配的所有项目,并最终附加其中最新的项目,即最大(按字母顺序)元素
p1 = [x for x in my_list if x.startswith("PPT_6")]
p2 = [x for x in my_list if x.startswith("PPT_12")]
result = [x for x in my_list if x not in p1 and x not in p2]
result.append(max(p1))
result.append(max(p2))
print(result)
这些文件名中的datetime格式允许您不使用datetime函数,字母顺序就足够了 您可以删除与这两个模式匹配的所有项目,并最终附加其中最新的项目,即最大(按字母顺序)元素
p1 = [x for x in my_list if x.startswith("PPT_6")]
p2 = [x for x in my_list if x.startswith("PPT_12")]
result = [x for x in my_list if x not in p1 and x not in p2]
result.append(max(p1))
result.append(max(p2))
print(result)
你试图用
PPT_6
和PPT_12
获取最新文件,其余的保持原样?你试图用PPT_6
和PPT_12
获取最新文件,其余的保持原样?我得到了名称错误:名称“re”没有定义re
是一个标准库正则表达式的python包。你必须导入它。我在上面的代码段中添加了import语句。我得到了NameError:name're'未定义
re
是正则表达式的标准库python包。你必须导入它。我在上面的代码段中添加了import语句。可以,但文件并不总是sorted@LuisMedina“并非总是对文件进行排序”这正是我使用sorted()
的原因。同样,使用groupby()
您不必事先知道PPT_6
和PPT_12
。这没关系,但文件并不总是sorted@LuisMedina“并非总是对文件进行排序”这正是我使用sorted()
的原因。同样,使用groupby()
您不必事先知道PPT_6
和PPT_12
。