13.9 通过文件名查找文件

问题

你需要写一个涉及到文件查找操作的脚本,比如对日志归档文件的重命名工具, 你不想在 Python 脚本中调用 shell,或者你要实现一些 shell 不能做的功能。

解决方案

查找文件,可使用 os.walk() 函数,传一个顶级目录名给它。

讨论

os.walk() 方法为我们遍历目录树, 每次进入一个目录,它会返回一个三元组,包含相对于查找目录的相对路径,一个该目录下的目录名列表, 以及那个目录下面的文件名列表。

使用 os.path.join() 合并路径。

os.path.abspath() ,它接受一个路径,可以是相对路径,最后返回绝对路径。

os.path.normpath() ,用来返回正常路径,可以解决双斜杆、对目录的多重引用的问题等。

下面的函数打印所有最近被修改过的文件:

#!/usr/bin/env python3.3

import os
import time

def modified_within(top, seconds):
    now = time.time()
    for path, dirs, files in os.walk(top):
        for name in files:
            fullpath = os.path.join(path, name)
            if os.path.exists(fullpath):
                mtime = os.path.getmtime(fullpath)
                if mtime > (now - seconds):
                    print(fullpath)

if __name__ == '__main__':
    import sys
    if len(sys.argv) != 3:
        print('Usage: {} dir seconds'.format(sys.argv[0]))
        raise SystemExit(1)

    modified_within(sys.argv[1], float(sys.argv[2]))

在此函数的基础之上,使用 os,os.path,glob 等类似模块,你就能实现更加复杂的操作了。

Last updated

Was this helpful?