Python从日期开始查找每小时的文件列表

问题描述 投票:-1回答:2

我有一个我想循环的文件目录(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的开始和结束范围,但代码变得非常难看。我知道日期时间可能会有所帮助,但三角洲似乎只能运行几天而不是秒。有没有更简单的方法我不知道/想到?

python list date
2个回答
1
投票

你可以尝试这样做 -

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以查看结果。


0
投票

IIUC,你可以使用datetimepd.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')]
}
© www.soinside.com 2019 - 2024. All rights reserved.