Проблема со скриптом для удаления файлов с определенным расширением - PullRequest
0 голосов
/ 17 февраля 2020

Я написал следующий скрипт для удаления файлов с определенным расширением. Однако этот скрипт удаляет файл с расширением '.log' or '.txt' or '.css'.

Что, если расширение файла '.log000123' или '.log1234', поэтому здесь расширение постоянное, но после расширения добавляются случайные числа. Что можно сделать, чтобы удалить такие файлы через этот скрипт?

Будем весьма благодарны за любые изменения в скрипте или ссылку на любой веб-сайт, где приведен такой пример.

import os, time, sys

folder_path = "C:\SampleFolder"
file_ends_with = ".log"
how_many_days_old_logs_to_remove = 7

now = time.time()
only_files = []

for file in os.listdir(folder_path):
    file_full_path = os.path.join(folder_path,file)
    if os.path.isfile(file_full_path) and file.endswith(file_ends_with):
        #Delete files older than x days
        if os.stat(file_full_path).st_mtime < now - how_many_days_old_logs_to_remove * 86400: 
             os.remove(file_full_path)
             print "\n File Removed : " , file_full_path

Ответы [ 4 ]

1 голос
/ 17 февраля 2020

Вы можете использовать регулярные выражения и os.path.splitext:

import os
import re

file = "myfile.log123"

pattern = ".log(.*)"  # match .log followed by anything
fname, ext = os.path.splitext(file)

# check this condition:
if re.match(pattern, ext):
    # do stuff
0 голосов
/ 17 февраля 2020

Мы могли бы использовать Регулярные выражения , чтобы определить, является ли файл файлом log.

Вместо того, чтобы использовать модуль time, вы можете использовать модуль datetime, если хотите это удалить файлы журнала, которые старше 7 дней.

Посмотрите на код ниже:

import re
import datetime
import os

folder_path = "C:\SampleFolder"
only_files = []

for file in os.listdir(folder_path):
    file_full_path = os.path.join(folder_path, file)
    if os.path.isfile(file_full_path) and re.search(r".*\.log.*", file_full_path):
        # Delete files older than x days
        last_mod_time = datetime.datetime.fromtimestamp(os.stat(file_full_path).st_mtime)
        limt_mod_time = datetime.datetime.today() - datetime.timedelta(days=7)

        if last_mod_time < limt_mod_time:
            os.remove(file_full_path)
            print("\n File Removed : ", file_full_path)
0 голосов
/ 17 февраля 2020

Попробуйте это:

import fnmatch
import os

matches = []
folder_path = "C:\SampleFolder"

how_many_days_old_logs_to_remove = 7

now = time.time()

for root, dirnames, filenames in os.walk(folder_path):

    for filename in fnmatch.filter(filenames, '*.log*'):

        if os.stat(filename).st_mtime < now - how_many_days_old_logs_to_remove * 86400: 
             os.remove(filename)
             print "\n File Removed : " , file_full_path

        # matches.append(os.path.join(root, filename))

0 голосов
/ 17 февраля 2020

Это должно работать:

import os, time, sys

folder_path = "C:\SampleFolder"
file_contains = ".log"
how_many_days_old_logs_to_remove = 7

now = time.time()
only_files = []

for file in os.listdir(folder_path):
    file_full_path = os.path.join(folder_path,file)
    if os.path.isfile(file_full_path) and file_contains in file_full_path:
        #Delete files older than x days
        if os.stat(file_full_path).st_mtime < now - how_many_days_old_logs_to_remove * 86400: 
             os.remove(file_full_path)
             print "\n File Removed : " , file_full_path
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...