3

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

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

(这是旧文件文件夹中的第一个 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 语句来查看它是否超过一天。但是,这仍然只是单个文件基础之一,这对于我希望程序执行的操作确实不起作用。我希望它对文件夹中的所有文件执行此操作,无论这些文件的名称是什么,或者它们有多少。任何帮助将不胜感激!

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

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

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

4

3 回答 3

3

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)
于 2021-08-21T12:51:32.527 回答
0

对于getmtime返回值是一个数字,给出自纪元以来的秒数。因此,我们可以使用该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)
于 2021-08-21T12:47:25.367 回答
0

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

这是示例:

import os, datetime
n = os.path.getmtime("your file path")
print(datetime.datetime.fromtimestamp(n))
于 2021-08-21T12:55:28.333 回答