Фильтр списка файлов из каталога в python

#python

Вопрос:

У меня есть следующие файлы в каталоге.

Каталог: /главная страница/имя пользователя/файлы/

 pytest.py
jobrun.log
First_new_2021-09-17.log
Last_new_2021-09-17.log
First_new_2021-09-16.log
Last_new_2021-09-16.log
 

Мой ожидаемый результат-перечислить только те файлы, у которых есть новые, и дата должна совпадать с текущей датой.

Ожидаемый результат:

 First_new_2021-09-17.log
Last_new_2021-09-17.log
 

Как этого добиться в python.

Комментарии:

1. Не могли бы вы, пожалуйста, поделиться своими успехами? Что вы пробовали до сих пор?

2. Искать glob() .

3. С чем вы боретесь? Получение списка файлов в каталоге? Отфильтровывать файлы с новыми в них? Отфильтровывать файлы с сегодняшней датой в них? Запускаете python?

4. Я не в состоянии отфильтровать его. Я использую os.listdir(каталог)

Ответ №1:

вы можете использовать ОС

 import datetime
import os
        
thedate  = datetime.datetime.now()    
filelist = [ f for f in os.listdir(mydir) if thedate.strftime("%Y-%m-%d")  in f ]
 

Комментарии:

1. он будет соответствовать файлу с именем Last_2021-09-17.log , Last_2021-09-17.pdf которое не является допустимым результатом

Ответ №2:

Вы можете начать с использования встроенной библиотеки python glob.
Docs: https://docs.python.org/3/library/glob.html

 import time
from glob import glob

###Since you are working in the same directory, you can simply call glob to find all the files with the extention '.log' by using the wildcard expression '*'.
###Now to get current date you can use time module

today_date = time.strftime("%Y-%m-%d")
file_loc = glob(f'*{today_date}.log')
print(file_loc)


 

Ответ №3:

Реализация Pathlib:

 from pathlib import Path
from datetime import date


folder = Path("/home/user_name/files/")
today = date.today()
match = today.strftime("*new_%Y-%m-%d.log")

matching = [fp for fp in folder.glob(match)]
print(matching)
 

Ответ №4:

Вероятно, ваше решение должно выглядеть так:

 import datetime
import re
import os

today = datetime.date.today() # date today
f_date = today.strftime("%Y-%m-%d") # format the string

pattern = re.compile(fr"[w] _new_{f_date}.log") # create a pattern to match your files with

result = []

for path, dirs, files in os.walk('/home/user_name/files/'): # iterate over the directories
   for file in files: # iterate over each file in the current directory
       res = pattern.match(file) # find match
       if res := res.group(0): # get name matching the result
          result.append(res) # append name to a list of results

print(result)