【问题标题】:Get last modification date of drive in Python在 Python 中获取驱动器的最后修改日期
【发布时间】:2015-05-06 13:50:42
【问题描述】:

我正在尝试在 Python 中获取 USB 驱动器的最后修改日期。 我知道os.path.getmtime()os.stat(),但它们只适用于文件夹和文件。当我在 USB 驱动器的根路径上运行 os.path.getmtime() 时,我会得到“Mon Dec 31 23:00:00 1979”(在 Windows 7 上)或 1970 年的日期(在 Linux 上)。

循环浏览内容并查找最近修改的文件无济于事,因为我可以通过添加和删除文件来修改驱动器的内容,而无需实际更改上次修改日期。

我需要这个,因为我正在编写一个脚本,该脚本需要将 USB 驱动器上的文件和文件夹编入数据库中。如果有很多项目,这可能需要一些时间,所以我只想重新索引自脚本上次使用驱动器以来内容已更改的内容。

编辑:脚本播放音频文件(从 USB 驱动器或其他地方),这些文件不太可能改变。真正重要的是检查驱动器的内容是否已更改(是否添加或删除了音频文件和文件夹)。内容被脚本索引,因为它需要每个文件(在 USB 驱动器上或不在 USB 驱动器上)的唯一 ID 来制作播放列表。

提前感谢您的帮助。

【问题讨论】:

  • 我认为有任何简单的方法可以做到这一点,但显然没有。我通过强制我的脚本查看 USB 驱动器上的特定文件夹找到了一种解决方法,这允许我使用 os.path.getmtime()。

标签: python usb-drive last-modified


【解决方案1】:

您可以使用 hashlib 和 glob 库来循环遍历文件并为每个文件计算一个哈希值并将其存储在某个文件中。然后检查当前计算的哈希值与前一个哈希值,如果它们不同,则执行数据库更新

【讨论】:

  • 谢谢,但如果我没记错的话,这不会捕捉到驱动器上文件的添加或删除等变化。
【解决方案2】:

不用查找最后修改的文件,只需使用max(os.lstat(file)[-3:]) 查找文件上的最后一个“事件”:

import datetime
import os

volume = 'F:/'

#simply yelds all files in all subdirs of the volume
def all_files(volume):
    for root, dirnames, filenames in os.walk(volume):
        for filename in filenames:
            yield os.path.join(root, filename)

print datetime.datetime.fromtimestamp(max((max(os.lstat(file)[-3:]) for file in all_files(volume))))

在我的系统 (WinXP) 中工作,我尝试在卷中修改创建或复制/粘贴文件。

不适用于文件擦除。

【讨论】:

  • 谢谢,但我需要一些考虑到任何更改的东西,包括文件删除。
  • ..所以我猜你只能将所有文件名+事件日期存储在一个文件(或数据库)中,并检查上次保存的数据和当前数据之间是否有任何区别..
  • 我已编辑我的问题以提供有关上下文的更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 2012-07-07
  • 2011-05-20
  • 1970-01-01
  • 2021-11-16
  • 2010-09-17
相关资源
最近更新 更多