如何提取 Python 目录中每个文件的 'last modified time'?

How do I pull the 'last modified time' of each file within a directory in Python?

我的任务是创建一个小应用程序,允许用户: 浏览并选择一个包含每天要检查的文件的特定文件夹, 浏览并选择将接收复制文件的特定文件夹, 并手动启动脚本执行的 'file check' 进程。 为此,我需要获取最后 mod 时间并添加一个 if 语句来检查文件是否超过 24 小时,然后它将文件移至正确的文件夹。我想我知道该怎么做。我 运行 遇到问题的地方是 os.path.getmtime 方法。据我了解,我无法获得多个文件的 mod 化时间。我必须专门命名该文件。所以 '../File Transfer/Old Files/' 不起作用。我一直收到同样的错误:

FileNotFoundError: [WinError 2] The system cannot find the file specified: 'LICENSE-MIT.txt' 

(这是 Old Files 文件夹中的第一个 txt 文件)如果我将代码更改为:

x = os.path.getmtime(../File Transfer/Old Files/LICENSE-MIT.txt)

它有效,但有一个并发症。它给了我时间,以秒为单位,在 4490 亿范围内。我可以使用以下代码将该号码转换为可用号码:

y = int(x)
z = y//60//60
print(z)

这使它保持为 int 而不是 float,并将其从秒转换为小时。然后我会做一个 >=24 if 语句来查看它是否超过一天。但是,这仍然只是一个单一的文件基础,对于我希望程序执行的操作来说确实不起作用。我希望它对文件夹中的所有文件执行此操作,而不管这些文件的名称是什么,或者其中有多少。任何帮助将不胜感激!

这是我用来迭代文件夹并分别获取每个文件 mod 时间的脚本:

for file in os.listdir('../File Transfer/Old Files/'):
    if file.endswith ('.txt'):
        time_mod = os.path.getmtime(file)
        print(time_mod)

忽略最后一行。那只是给我的,所以请查看故障排除结果。

对于 getmtime,return 值是一个数字,表示自纪元以来的秒数。因此我们可以使用 datetime 模块来获取对应的日期时间对象。

from os.path import getmtime
from datetime import datetime as dt

m_time = getmtime('somefile.txt')

time = dt.fromtimestamp(m_time)

示例:

>>> time = getmtime('wsgi.py')
>>> time
1619622258.1773882
>>> dt.fromtimestamp(time)
datetime.datetime(2021, 4, 28, 20, 34, 18, 177388)

os.listdir()方法列出给定路径的文件不包括路径,因此您需要自己连接路径:

for file in os.listdir('../File Transfer/Old Files/'):
    if file.endswith('.txt'):
        time_mod = os.path.getmtime('../File Transfer/Old Files/' + file)
        print(time_mod)

glob.glob() 方法在这种情况下效果很好:

import os
import glob

for file in glob.globr('../File Transfer/Old Files/*.txt'):
    time_mod = os.path.getmtime('../File Transfer/Old Files/' + file)
    print(time_mod)

您可以像这样获取自上次修改每个文件以来经过的小时数:

import os
from time import time

PATH = '../File Transfer/Old Files/'

for file in os.listdir(PATH):
    if file.endswith('.txt'):
        time_mod = time() - os.path.getmtime(PATH + file)
        print(time_mod // 3600)

导入os 模块和日期时间模块。使用 os 模块中的 path.getmtime() 方法。它会给你时间戳。然后使用 datetime 模块的 datetime.fromtimestamp() 方法将其转换为正常时间。

示例如下:

import os, datetime
n = os.path.getmtime("your file path")
print(datetime.datetime.fromtimestamp(n))