Python находит почасовой список файлов с даты - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть каталог файлов, который я хотел бы зациклить (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: получить список всех файлов в dir2 из 20170604.230000 - 20170605.000000 20170605.001000: получить список всех файлов в dir2 из 20170604.231000 - 20170605.001000 20170605.002000: получить список всехфайлы в dir2 из 20170604.232000 - 20170605.002000

....

20170610.235000: получить список всех файлов в dir2 из 20170609.235000 - 20170610.235000

Я разбил aдиапазон начального и конечного диапазонов гггг, мм, дд, чч, мм и секунд, но код очень быстро уродлив.Я знаю, что дата и время могут помочь, но дельта, кажется, работает только в днях, а не в секундах.Есть ли более простой способ, о котором я не знаю / не думаю?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы можете попытаться сделать что-то вроде этого -

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 голосов
/ 11 декабря 2018

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')]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...