Python:当文件名(不是路径)可用时,如何在系统范围内搜索文件

时间:2011-03-01 10:35:44

标签: python search

我还是Python的新手(使用2.6),我只是在文件名可用时尝试对系统进行全系统搜索,并在Windows上返回绝对路径。我搜索并发现了一些像scriptutil.py这样的模块,并查看了os模块,但没有找到任何适合我需要的东西(或者我可能没有正确理解所有内容以将它应用到我需要的东西,因此没有包括任何码)。我将不胜感激任何帮助。

感谢。

3 个答案:

答案 0 :(得分:17)

os.walk()函数是这样做的一种方式。

import os
from os.path import join

lookfor = "python.exe"
for root, dirs, files in os.walk('C:\\'):
    print "searching", root
    if lookfor in files:
        print "found: %s" % join(root, lookfor)
        break

答案 1 :(得分:4)

您可以从 root 目录开始,并递归地遍历目录结构,查看该文件的每个级别。当然,如果你想搜索你的整个系统,你需要为每个驱动器调用它。

os.path.walk(rootdir,f,arg)

对于类似问题here和另一个here

有一个很好的答案

答案 2 :(得分:0)

这样的事情会起作用吗?

import os
import sys
import magic
import time
import fnmatch

class FileInfo(object):

    def __init__(self, filepath):
        self.depth = filepath.strip('/').count('/')
        self.is_file = os.path.isfile(filepath)
        self.is_dir = os.path.isdir(filepath)
        self.is_link = os.path.islink(filepath)
        self.size = os.path.getsize(filepath)
        self.meta = magic.from_file(filepath).lower()
        self.mime = magic.from_file(filepath, mime=True)
        self.filepath = filepath


    def match(self, exp):
        return fnmatch.fnmatch(self.filepath, exp)

    def readfile(self):
        if self.is_file:
            with open(self.filepath, 'r') as _file:
                return _file.read()

    def __str__(self):
        return str(self.__dict__)



def get_files(root):

    for root, dirs, files in os.walk(root):

        for directory in dirs:
            for filename in directory:
                filename = os.path.join(root, filename)
                if os.path.isfile(filename) or os.path.isdir(filename):
                    yield FileInfo(filename)

        for filename in files:
            filename = os.path.join(root, filename)
            if os.path.isfile(filename) or os.path.isdir(filename):            
                yield FileInfo(filename)


for this in get_files('/home/ricky/Code/Python'):
    if this.match('*.py'):
        print this.filepath