Открывать файлы старше 3 дней с отметкой даты в имени файла - Python 2.7

** Проблема ** Я пытаюсь открыть (в python) файлы старше 3 дней с отметкой даты, которая находится в текущем имени. Пример: 2016_08_18_23_10_00 - JPN - MLB - Миккимаус v Burgerface.ply. Пока что я могу создать переменную даты, однако я не знаю, как искать эту переменную в имени файла. Я предполагаю, что мне нужно сначала преобразовать его в строку?

from datetime import datetime, timedelta
import os
import re
path = "C:\Users\michael.lawton\Desktop\Housekeeper"

## create variable d where current date time is subtracted by 3 days ##

days_to_subtract = 3
d = datetime.today() - timedelta(days=days_to_subtract)

print d

## open file in dir where date in filename = d or older ##

for filename in os.listdir(path):
if re.match(d, filename):
    with open(os.path.join(path, filename), 'r') as f:
        print line,

Любая помощь будет высоко ценится

2 ответа

Решение

Ты можешь использовать strptime за это. Он преобразует вашу строку (при условии, что она правильно отформатирована) в объект datetime, который вы можете использовать для сравнения, если ваш файл старше 3 дней, основываясь на имени файла:

from datetime import datetime

...

lines = []
for filename in os.listdir(path):
  date_filename = datetime.strptime(filename.split(" ")[0], '%Y_%m_%d_%H_%M_%S')
  if date_filename < datetime.datetime.now()-datetime.timedelta(days=days_to_subtract):
    with open(os.path.join(path, filename), 'r') as f:
      lines.extend(f.readlines()) # put all lines into array

Если имя файла 2016_08_18_23_10_00 - JPN - MLB - Mickeymouse v Burgerface.ply часть datetime будет извлечена filename.split(" ")[0], Затем мы можем использовать это, чтобы проверить, если он старше трех дней, используя datetime.timedelta

Чтобы открыть все файлы в данном каталоге, которые содержат метку времени в своем имени старше 3 дней:

#!/usr/bin/env python2
import os
import time

DAY = 86400 # POSIX day in seconds
three_days_ago = time.time() - 3 * DAY
for filename in os.listdir(dirpath):
    time_string = filename.partition(" ")[0]
    try:
        timestamp = time.mktime(time.strptime(time_string, '%Y_%m_%d_%H_%M_%S'))
    except Exception: # can't get timestamp
        continue
    if timestamp < three_days_ago: # old enough to open
        with open(os.path.join(dirpath, filename)) as file: # assume it is a file
            for line in file:
                print line,

Код предполагает, что временные метки находятся в местном часовом поясе. Это может принимать во внимание переходы DST на платформах, где C mktime() имеет доступ к базе данных tz (если в вашем случае не имеет значения, является ли файл 72 или 73 часами, просто проигнорируйте этот параграф).

Рассмотрите возможность использования метаданных файла, таких как "время последнего изменения файла", вместо извлечения метки времени из его имени: timestamp = os.path.getmtime(path),

Другие вопросы по тегам