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