使用 Python,如何根据文件系统的搜索获取文件信息对象的数组?
题
目前我有一个 bash 脚本,它运行 find
命令,就像这样:
find /storage/disk-1/Media/Video/TV -name *.avi -mtime -7
这会获取过去 7 天内添加到我的系统中的电视节目列表。然后我继续创建一些符号链接,以便我可以观看最新的电视节目。
我想用Python重新编码,但我有几个问题,我似乎可以找到使用Google的答案(也许我没有寻找正确的东西)。我认为总结这一点的最好方法就是提出一个问题:
如何在我的文件系统上执行搜索(我应该调用 find
?)这给了我一个文件信息对象数组(包含修改日期、文件名等),以便我可以根据日期和其他类似的东西对它们进行排序?
解决方案
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))
这将返回所有同时返回的文件,作为对的列表(文件名,统计结果)。
其他提示
查看模块os:os.walk是遍历文件系统的函数,os.path是给出文件mtime和其他文件信息的模块。 os.path还定义了许多用于解析和拆分文件名的函数。
感兴趣的是,模块glob定义了“globbing”的函数。 strings(使用unix通配符规则匹配字符串)
从中可以看出,构建符合某些标准的文件列表应该很容易。- 您可以通过“子流程”模块使用“查找”。
- 然后,使用“split”字符串函数来剖析每一行
- 对于每个文件,使用操作系统模块(例如getmtime 等)获取文件信息
或者
- 使用“walk”和“glob”模块获取对象中的文件路径
不隶属于 StackOverflow