如何用Python获取文件系统搜索的文件信息对象数组?
目前我有一个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))
这段话的意思是,它会返回所有找到的文件,并把它们以一对一对的形式列出来,格式是(文件名,状态结果)。