Найти шаблон по именам файлов - Python - PullRequest
0 голосов
/ 27 января 2020

Мне нужно найти все файлы .xlsx со следующим именем: mg_YYYMMDD.xlsx Дата YYYYMMDD должна быть больше фиксированной даты, для которой уже установлено значение last_date.

last_date = (file.date.max())

filenames = [
    fn for fn in os.listdir()
    if fn.endswith(".xlsx")
      and .....
]
filenames

У меня нет знать последнюю часть для l oop ..

Вот примеры файлов в папке:

['mg_20200120.xlsx', 'mg_20200122.xlsx']

Вывод last_date: Timestamp ('2020-01-21 00:00:00')

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 27 января 2020

Учитывая формат вашей даты, я бы просто воспринял это как целое число, оно должно работать хорошо.

Сначала попробуйте сделать стандарт l oop. Затем вы можете инкапсулировать его в функцию, затем вы можете использовать функцию понимания списка. Это было бы намного более читабельно таким образом.

Значение l oop должно быть примерно таким:

ref_date = int('20200121')
for fn in os.listdir():
    current_file_date = int(fn.split('.')[0].split('_')[-1])
    if current_file_date > ref_date:
        ...

Технически, вы можете сравнивать строки напрямую, не конвертируя их в целые числа.

0 голосов
/ 27 января 2020

Мы можем использовать модуль datetime и его метод strptime, чтобы преобразовать строку в дату, а затем сравнить дату из имени файла с last_date:

from datetime import datetime

critical_date = datetime.fromtimestamp(last_date)

filenames = [
    fn for fn in os.listdir()
    if fn.endswith(".xlsx")
    and fn.startswith("mg_")
    and datetime.strptime("%Y%m%d", fn[3:-5]) < critical_date
]

(Это предполагает, что все имена файлов соответствуют формату "...YYYYMMDD....."). Просмотрите документы:

0 голосов
/ 27 января 2020

Одним из способов будет использование самой строки в качестве сравнения:

lastdate = "20200122" #in the form YYYYMMDD

filenames = [fn for fn in os.listdir() if fn.endswith(".xlsx") and fn[0:3] == "mg_" and fn[3:-5] >= lastdate]

РЕДАКТИРОВАТЬ: рассмотреть преобразование из datetime, если last_date из python datetime

last_date = datetime.now()
f = str(last_date)
new_last_date = f[0:4]+f[5:7]+f[8:10] #YYYY MM DD
...