#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)