如何用Python获取文件系统搜索的文件信息对象数组?

0 投票
3 回答
2280 浏览
提问于 2025-04-15 15:20

目前我有一个bash脚本,它运行了一个叫做find的命令,像这样:

find /storage/disk-1/Media/Video/TV -name *.avi -mtime -7

这个命令可以让我找到最近7天内添加到我系统里的电视剧。我接着会创建一些符号链接,这样我就能方便地找到我最新的电视剧。

我想把这个功能用Python重新写一遍,但我有一些问题在网上找不到答案(可能是我搜索的方式不对)。我觉得最好的办法就是直接问:

我该如何在我的文件系统中进行搜索(我应该调用find吗?),这样可以得到一个包含文件信息的数组(比如修改日期、文件名等等),然后我可以根据日期和其他条件进行排序?

3 个回答

1
  • 你可以通过“subprocess”模块来使用“find”命令。
  • 然后,使用“split”这个字符串函数来分解每一行。
  • 对于每个文件,可以使用OS模块(比如getmtime等)来获取文件的信息。

或者

  • 使用“walk”和“glob”模块来获取文件路径。
2

可以看看os模块:os.walk是一个用来遍历文件系统的函数,os.path是一个模块,它可以提供文件的修改时间和其他文件信息。此外,os.path还定义了很多函数,用于解析和分割文件名。

另外,glob模块也很有意思,它提供了一些函数,用于根据Unix的通配符规则来匹配字符串。

从这些内容来看,创建一个符合某些条件的文件列表应该很简单。

3
import os, time

allfiles = []
now = time.time()

# walk will return triples (current dir, list of subdirs, list of regular files)
# file names are relative to dir at first
for dir, subdirs, files in os.walk("/storage/disk-1/Media/Video/TV"):
    for f in files:
        if not f.endswith(".avi"):
            continue
        # compute full path name
        f = os.path.join(dir, f)
        st = os.stat(f)
        if st.st_mtime < now - 3600*24*7:
            # too old
            continue
        allfiles.append((f, st))

这段话的意思是,它会返回所有找到的文件,并把它们以一对一对的形式列出来,格式是(文件名,状态结果)。

撰写回答