我试图在遵循以下模式的文件夹中找到所有文件名:'index_YYYYMMDD.csv'。“ YYYYMMDD”部分代表数据文件的日期。下面列出了一些文件名:
'index_20091101.csv','index_20091102.csv','index_20091103.csv','index_20091104.csv','index_20091105.csv','index_20091106.csv','index_20091107.csv','index_20091108.csv',
给定一个startDate和endDate,我想查找所有文件名,其中日期部分在startDate和endDate之间。例如,对于上面的文件列表,如果startDate = 20091104和endDate = 20091107,我要查找的文件名应为:
'index_20091104.csv','index_20091105.csv','index_20091106.csv','index_20091107.csv'
我尝试了os.listdir函数,该函数为我提供了所有文件名。要过滤掉不需要的文件,我想我需要使用正则表达式,但无法解决。
有人可以帮我吗?谢谢!
我将采用以下方法。您可以定义一个简单的文件过滤器工厂。
import time
def make_time_filter(start, end, time_format, file_format='index_{time_format:}.csv'):
t_start = time.strptime(start, time_format)
t_end = time.strptime(end, time_format)
ft_fmt = file_format.format(time_format=time_format)
def filt(fname):
try:
return t_start <= time.strptime(fname, ft_fmt) <= t_end
except ValueError:
return False
return filt
现在,您只需做一个谓词即可过滤出所需的日期范围
time_filt = make_time_filter('20091101', '20091201', '%Y%m%d')
然后将此传递给 filter
filter(time_filt, os.listdir(your_dir))
或者说它是某种理解
(fname for fname in os.listdir(your_dir) if time_filt(fname))
正则表达式将更通用,但是您不需要这种正则表达式,因为您的文件名全部遵循简单的模式,您知道该模式必须包含日期。有关该time
模块的更多信息,请参阅docs。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句