Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:当只有文件名(而不是路径)可用时,如何在系统范围内搜索文件_Python_Search - Fatal编程技术网

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

Python:当只有文件名(而不是路径)可用时,如何在系统范围内搜索文件,python,search,Python,Search,我还不熟悉Python(使用2.6),我正在尝试在只有文件名可用时在系统范围内搜索文件,并在windows上返回绝对路径。我已经搜索并找到了一些模块,如scriptutil.py,并查看了操作系统模块,但没有找到任何适合我需要的模块(或者我可能没有正确理解所有内容以将其应用于我需要的内容,因此没有包含任何代码)。我将感谢任何帮助 谢谢。os.walk()函数是一种方法 import os from os.path import join lookfor = "python.exe" for r

我还不熟悉Python(使用2.6),我正在尝试在只有文件名可用时在系统范围内搜索文件,并在windows上返回绝对路径。我已经搜索并找到了一些模块,如scriptutil.py,并查看了操作系统模块,但没有找到任何适合我需要的模块(或者我可能没有正确理解所有内容以将其应用于我需要的内容,因此没有包含任何代码)。我将感谢任何帮助

谢谢。

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

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

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

一个类似的问题有一个很好的答案,另一个问题有类似的答案,你喜欢这个吗

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

@Martin Stone是的,但它需要一个路径,否则它只搜索当前工作目录(如果我理解正确的话)@ldmvcd,它从您告诉它开始的目录中递归搜索。@Martin Stone break应该被删除,因为在不同的目录中可能有几个同名的文件directories@Martin石谢谢你的代码,我想你已经试过了,但对我来说搜索不成功。它似乎只是在搜索和列出目录,而不是实际的文件。因此,它找不到第二份打印声明的匹配项。@Martin Stone,对不起,我收回这一点。你的代码做了它应该做的事情。非常感谢。感谢您提供的链接,它们很有帮助,就像上面发布的答案一样。使用需要3个参数的
os.path.walk
,自Python 2.3(并在3.0中完全删除)以来就被弃用,取而代之的是
os.walk
,它只需要1个参数(并且有3个可选参数)。