Python从日期开始查找每小时的文件列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python从日期开始查找每小时的文件列表相关的知识,希望对你有一定的参考价值。
我有一个我想循环的文件目录(dir1),其中文件名采用以下格式:
20170605.000000
20170605.001000
20170605.002000
...
20170610.235000
我还有另一个相当不规则的目录(dir2),其中文件名采用以下格式:
20170604.235710
20170605.000427
20170605.093241
20170605.172221
...
20170611.000426
我想循环遍历dir1中的文件,然后从dir2中的文件创建一个列表,该列表位于dir1中文件名的过去一小时内。例如:
20170605.000000:从20170604.230000获取dir2内所有文件的列表 - 20170605.000000 20170605.001000:从20170604.231000 - 20170605.001000获得dir2中所有文件的列表20170605.002000:从20170604.232000 - 20170605.002000获取dir2中所有文件的列表
....
20170610.235000:从20170609.235000 - 20170610.235000获取dir2中所有文件的列表
我已经打破了yyyy,mm,dd,hh,mm和seconds的开始和结束范围,但代码变得非常难看。我知道日期时间可能会有所帮助,但三角洲似乎只能运行几天而不是秒。有没有更简单的方法我不知道/想到?
你可以尝试这样做 -
from datetime import datetime
from datetime import timedelta
dir1_file_list = ['20170605.000000', '20170605.001000', '20170605.002000']
dir2_file_list = ['20170604.235710', '20170605.000427', '20170605.093241', '20170605.172221']
dir1_file_list = [datetime.strptime(f, '%Y%m%d.%H%M%S') for f in dir1_file_list]
dir2_file_list = [datetime.strptime(f, '%Y%m%d.%H%M%S') for f in dir2_file_list]
associations = dict()
for dir1_file in dir1_file_list:
associations[str(dir1_file)] = []
for dir2_file in dir2_file_list:
if 0 <= (dir1_file - dir2_file).total_seconds() <= 3600: # One hour timeframe
associations[str(dir1_file)].append(str(dir2_file))
然后打印dict associations
以查看结果。
IIUC,你可以使用datetime
和pd.to_datetime()
将你的列表转换为pd.Series()
系列,然后只需使用字典理解来返回你想要的输出:
import pandas as pd
from datetime import datetime, timedelta
dir1 = [
'20170605.000000',
'20170605.001000',
'20170605.002000',
]
dir2 = [
'20170604.235710',
'20170605.000427',
'20170605.093241',
'20170605.172221',
]
dir1 = pd.to_datetime(pd.Series(dir1), format='%Y%m%d.%H%M%S')
dir2 = pd.to_datetime(pd.Series(dir2), format='%Y%m%d.%H%M%S')
retrieved = {i: [j for j in dir2 if i-timedelta(hours=1) < j < i] for i in dir1}
返回:
{
Timestamp('2017-06-05 00:00:00'): [Timestamp('2017-06-04 23:57:10')],
Timestamp('2017-06-05 00:10:00'): [Timestamp('2017-06-04 23:57:10'), Timestamp('2017-06-05 00:04:27')],
Timestamp('2017-06-05 00:20:00'): [Timestamp('2017-06-04 23:57:10'), Timestamp('2017-06-05 00:04:27')]
}
以上是关于Python从日期开始查找每小时的文件列表的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法用两个日期之间的每小时日期时间有效地填充 python 中的 pandas df 列?
使用 Python 有效地查找部分字符串匹配 --> 从 5 GB 文件中的值列表开始的值