Вывод меток времени из списка файлов - PullRequest
0 голосов
/ 07 августа 2020

У меня проблемы с выводом отметок времени для файлов в каталоге. Хотите перечислить временные метки, если они достигают определенного временного окна, в настоящее время даже не могут получить вывод. Не уверен, что я делаю неправильно и врезаюсь в стену банкомата

from datetime import datetime, timedelta
from os import scandir

DIR = "/home/user/directory"
TIME_FORMAT = "%Y-%m-%d%H:%M:%S.%fZ"


def convert_timestamps():
    """converting timestamps to human readable"""
    # timestamp = datetime.utcnow() - timedelta(days=7)
    timestamp = datetime.utcfromtimestamp
    file_times = timestamp.strftime(TIME_FORMAT)
    return file_times

def get_files():
"""getting files from dir"""
    dir_filenames = scandir(DIR)
    for filename in dir_filenames:
        if filename.is_file():
            file_stat = os.stat(str(filename))
            # info = os.stat(filename)
            print("Last Modified time: {}".format(filename.name, convert_timestamps(file_stat.st_mtime)))



if __name__ == 'main':
    get_files()

Следующий фрагмент работает, но, очевидно, не очень похож на программу

DIR = "/home/user/directory"
TIME_FORMAT = "%Y-%m-%d%H:%M:%S.%fZ"


file_stat = os.stat(DIR)
timestamp = datetime.utcnow() - timedelta(days=7)
file_times = timestamp.strftime(TIME_FORMAT)
print("Last mod time are: ", file_times)

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Рекомендуем взглянуть на pathlib и / или glob , чтобы упростить задачу. Вот, например,

from datetime import datetime, timezone
from pathlib import Path

DIR = "/home/user/directory"
TIME_FORMAT = "%Y-%m-%d%_H:%M:%S.%fZ"

dir_content = list(Path(DIR).glob('*')) # give me anything...

for p in dir_content:
    if p.is_file():
        timestring = (
               datetime.fromtimestamp(p.stat().st_mtime, timezone.utc)
               .strftime(TIME_FORMAT)
               )
        print(f"{p.name} \tLast Modified time: {timestring}")

Незначительное замечание: поскольку вы явно хотите UT C ("Z"), я бы предпочел явно установить timezone.ut c вместо использования utcfromtimestamp (который является ... сбивает с толку ).

0 голосов
/ 07 августа 2020

Основная проблема заключалась в названии модуля. Вам нужно проверять __main__, а не main. Вы также не передавали никаких параметров функции convert_timestamps.

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

from datetime import datetime, timedelta
from os import scandir
import os

DIR = "C:/tmp"  #"/home/user/directory"
TIME_FORMAT = "%Y-%m-%d %H:%M:%S.%fZ"


def convert_timestamps(stmp):
    """converting timestamps to human readable"""
    # timestamp = datetime.utcnow() - timedelta(days=7)
    timestamp = datetime.utcfromtimestamp(stmp)
    file_times = timestamp.strftime(TIME_FORMAT)
    return file_times

def get_files():
    """getting files from dir"""
    dir_filenames = scandir(DIR)
    for filename in dir_filenames:
        if filename.is_file():
            file_stat = os.stat(filename)
            # info = os.stat(filename)
            print("{} \tLast Modified time: {}".format(filename.name, convert_timestamps(file_stat.st_mtime)))

if __name__ == '__main__':   # must be __main__
    get_files()

Вывод

newfile.txt     Last Modified time: 2020-07-23 03:06:20.470809Z
oktatext.png    Last Modified time: 2020-07-01 16:34:03.057133Z
output.xlsx     Last Modified time: 2020-08-03 14:38:47.973999Z
python.png      Last Modified time: 2020-06-29 14:33:03.803685Z
pythonlogo.jpg  Last Modified time: 2020-07-06 02:53:09.642297Z
SomeFile2.dll   Last Modified time: 2020-08-01 21:26:42.978218Z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...