代码之家  ›  专栏  ›  技术社区  ›  Nick Bolton

使用python,如何根据对文件系统的搜索获得文件信息对象数组?

  •  0
  • Nick Bolton  · 技术社区  · 15 年前

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

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

    这将获取最近7天添加到我的系统中的电视节目列表。然后,我继续创建一些符号链接,这样我就可以访问我最新的电视节目。

    我想用python重新编写代码,但是我有几个问题,我似乎可以找到使用google的答案(也许我找不到正确的东西)。我认为总结这一点的最佳方法是提出问题:

    如何在我的文件系统上执行搜索(我应该打电话给 找到 ?)它给了我一个文件信息对象数组(包含修改日期、文件名等),以便我可以根据日期和其他类似的东西对它们进行排序?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Martin v. Löwis    15 年前
    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))
    

    这将返回查找到的所有文件,作为成对列表(文件名、stat结果)。

        2
  •  2
  •   Adrien Plisson    15 年前

    查看模块os:os.walk是浏览文件系统的函数,os.path是提供文件mtime和其他文件信息的模块。此外,os.path还定义了许多用于解析和拆分文件名的函数。

    同样有趣的是,module glob为“globbing”字符串定义了一个函数(使用unix通配符规则匹配字符串)

    由此,构建与某个标准匹配的文件列表应该很容易。

        3
  •  1
  •   jldupont    15 年前
    • 您可以通过“子流程”模块使用“查找”。
    • 然后,使用“split”字符串函数解析每一行
    • 对于每个文件,使用OS模块(例如getmtime等)获取文件信息

    • 使用“walk”和“glob”模块获取对象中的文件路径