Как удалить файлы на основе времени создания для каждого дня в python - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть система, которая генерирует 3 файла в минуту каждый день. Файлы до 4 утра и после 10 вечера для этого конкретного дня незначительны и занимают много места. Я хочу избавиться от них. Файлы генерируются непрерывно, и, следовательно, в подпапке каждый день хранится почти месяц файлов данных. Как я могу удалить несущественные файлы данных с помощью кода python?

Мой код выглядит следующим образом:

from datetime import date, timedelta

def daterange(start_date, end_date):
   for n in range(int ((end_date - start_date).days)):
    yield start_date + timedelta(n)

start_date = datetime.datetime(2020, 3, 5,00,00)
end_date = datetime.datetime(2020, 3, 8, 23,59)
for single_date in daterange(start_date, end_date):
    fpath = r"C:\Users\basantrp\Desktop\Data Trimming"
    os.chdir(fpath)
    for root, dirs, files in os.walk(fpath):
        for f in files:
           st=os.path.getmtime(fpath)
           print(datetime.datetime.fromtimestamp(st))
            if datetime.datetime.fromtimestamp(st) < (start_date + datetime.timedelta(0,18000)):
            os.unlink(f)

Но, похоже, это не работает. вывод

datetime.datetime.fromtimestamp(st)  is 2020-03-19 00:16:10.550944

Это не желаемое решение, потому что оно показывает время, довольно близкое к моменту, когда программа была скомпилирована или инициирована.

1 Ответ

0 голосов
/ 16 апреля 2020
# importing the required modules
import os
import shutil
import time

# main function
def main():

    # initializing the count
    deleted_folders_count = 0
    deleted_files_count = 0

    # specify the path
    path = "/PATH_TO_DELETE"

    # specify the days
    days = 30

    # converting days to seconds
    # time.time() returns current time in seconds
    seconds = time.time() - (days * 24 * 60 * 60)

    # checking whether the file is present in path or not
    if os.path.exists(path):

        # iterating over each and every folder and file in the path
        for root_folder, folders, files in os.walk(path):

            # comparing the days
            if seconds >= get_file_or_folder_age(root_folder):

                # removing the folder
                remove_folder(root_folder)
                deleted_folders_count += 1 # incrementing count

                # breaking after removing the root_folder
                break

            else:

                # checking folder from the root_folder
                for folder in folders:

                    # folder path
                    folder_path = os.path.join(root_folder, folder)

                    # comparing with the days
                    if seconds >= get_file_or_folder_age(folder_path):

                        # invoking the remove_folder function
                        remove_folder(folder_path)
                        deleted_folders_count += 1 # incrementing count


                # checking the current directory files
                for file in files:

                    # file path
                    file_path = os.path.join(root_folder, file)

                    # comparing the days
                    if seconds >= get_file_or_folder_age(file_path):

                        # invoking the remove_file function
                        remove_file(file_path)
                        deleted_files_count += 1 # incrementing count

        else:

            # if the path is not a directory
            # comparing with the days
            if seconds >= get_file_or_folder_age(path):

                # invoking the file
                remove_file(path)
                deleted_files_count += 1 # incrementing count

    else:

        # file/folder is not found
        print(f'"{path}" is not found')
        deleted_files_count += 1 # incrementing count

    print(f"Total folders deleted: {deleted_folders_count}")
    print(f"Total files deleted: {deleted_files_count}")


def remove_folder(path):

    # removing the folder
    if not shutil.rmtree(path):

        # success message
        print(f"{path} is removed successfully")

    else:

        # failure message
        print(f"Unable to delete the {path}")



def remove_file(path):

    # removing the file
    if not os.remove(path):

        # success message
        print(f"{path} is removed successfully")

    else:

        # failure message
        print(f"Unable to delete the {path}")


def get_file_or_folder_age(path):

    # getting ctime of the file/folder
    # time will be in seconds
    ctime = os.stat(path).st_ctime

    # returning the time
    return ctime


if __name__ == '__main__':
    main()

Вам необходимо настроить следующие две переменные в приведенном выше коде в соответствии с требованием.

days = 30
path = "/PATH_TO_DELETE"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...